проверка ввода данных ! срочно плиз !
От: Danilov YV Россия  
Дата: 11.04.03 05:19
Оценка:
подскажите плиз !

я ввожу номер квартиры... но в номере могут содежаться буквы при том только русские... напрмер 23а, 5б... плюс к этому буква впереди не должна находицца.. то есть а23 не может быть... как мне сделать такую проверку ? то есть:
1) буквы русские
2) буква не впереди ?
Re: проверка ввода данных ! срочно плиз !
От: ssm Россия  
Дата: 11.04.03 05:53
Оценка:
Здравствуйте, 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;
Re[2]: проверка ввода данных ! срочно плиз !
От: Danilov YV Россия  
Дата: 11.04.03 06:01
Оценка:
Здравствуйте, 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>



а если всё тоже самое только на С++ ? (о:
заранее спасибо... мне просто некогда разбирацца с паскалевым кодом... ПЛИИИИЗ
Re[3]: проверка ввода данных ! срочно плиз !
От: ssm Россия  
Дата: 11.04.03 06:30
Оценка:
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.