Здравствуйте, Danilov YV, Вы писали:
DY>подскажите плиз !
DY>я ввожу номер квартиры... но в номере могут содежаться буквы при том только русские... напрмер 23а, 5б... плюс к этому буква впереди не должна находицца.. то есть а23 не может быть... как мне сделать такую проверку ? то есть:
DY>1) буквы русские
DY>2) буква не впереди ?
Вот простейший конечный автомат из двух состояний:
function Check(str : string) : boolean;
type
TState = (stNum, stLetter);
const
ValidChars = ['а'..'я'];
ValidNums = ['0'..'9'];
var
i : integer;
st : TState;
begin
result := false;
i := 1;
st := stNum;
while(i <= length(str)) do begin
if(st = stLetter) then begin
result := false;
exit;
end else if(st = stNum) then begin
if(str[i] in ValidChars) then begin
st := stLetter;
result := true;
end else if not(str[i] in ValidNums) then
exit;
end;
inc(i);
end;
result := true;
end;
Здравствуйте, ssm, Вы писали:
ssm>Вот простейший конечный автомат из двух состояний:
ssm>ssm>function Check(str : string) : boolean;
ssm>type
ssm> TState = (stNum, stLetter);
ssm>const
ssm> ValidChars = ['а'..'я'];
ssm> ValidNums = ['0'..'9'];
ssm>var
ssm> i : integer;
ssm> st : TState;
ssm>begin
ssm> result := false;
ssm> i := 1;
ssm> st := stNum;
ssm> while(i <= length(str)) do begin
ssm> if(st = stLetter) then begin
ssm> result := false;
ssm> exit;
ssm> end else if(st = stNum) then begin
ssm> if(str[i] in ValidChars) then begin
ssm> st := stLetter;
ssm> result := true;
ssm> end else if not(str[i] in ValidNums) then
ssm> exit;
ssm> end;
ssm> inc(i);
ssm> end;
ssm> result := true;
ssm>end;
ssm>
а если всё тоже самое только на С++ ? (о:
заранее спасибо... мне просто некогда разбирацца с паскалевым кодом... ПЛИИИИЗ
Здравствуйте, Danilov YV, Вы писали:
DY>а если всё тоже самое только на С++ ? (о:
DY>заранее спасибо... мне просто некогда разбирацца с паскалевым кодом... ПЛИИИИЗ
протестируешь сам:
bool check(const char *str){
enum State{stNum, stChar} st = stNum;
char ch;
while(*str){
ch = *str++;
if(st == stChar)
return false;
else if(st == stNum){
if(ch >= 'а' && ch <= 'я')
st = stChar;
else if (!isdigit(ch))
return false;
}
}
return true;
}