Определить, является ли введенное слово идентификатором, т.е. начинается ли оно с английской буквы в любом регистре или знака подчеркивания и не содержит других символов, кроме букв английского алфавита (в любом регистре), цифр...

Определить, является ли введенное слово идентификатором, т.е. начинается ли оно с английской буквы в любом регистре или знака подчеркивания и не содержит других символов, кроме букв английского алфавита (в любом регистре), цифр и знака подчеркивания.
Гость
Ответ(ы) на вопрос:
Гость
//Pascal ABC.NET 3.1 сборка 1256 Var  s:string;  se1,se2:set of char;  i:integer; begin se1:=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_']; se2:=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_','0','1','2','3','4','5','6','7','8','9']; readln(s); if not(lowcase(s[1]) in se1) then  begin   writeln('Не идентификатор');   exit;  end; for i:=2 to length(s) do if not(lowcase(s[i]) in se2) then   begin   writeln('Не идентификатор');   exit;  end; writeln('Идентификатор'); end. Пример ввода: _SomeIdentificator Пример вывода: Идентификатор
Гость
Подобные задачи "по-взрослому" решают с помощью так называемых "регулярных выражений". В данном случае регулярное выражение может быть таким: _[A-Za-z_\d]+ Оно понимается следующим образом. Сначала следует символ подчеркивания, за которым минимум один раз должен встретиться любой из символов: латинская буква на верхнем или нижнем регистре, символ подчеркивания или цифра (признак цифры - это \d, но можно было также написать 0-9). "Плюсик" как раз и означает "повторить один или более раз". По сути, в квадратных скобках мы просто описали множество, быть может, только не совсем так, как принято в Паскале. Далее все совсем просто. Применение MatchValue к строке порождает подстроку, в которой содержится часть исходной строки, удовлетворяющая регулярному выражению. Мы заносим её в строку с именем r. Если полученная подстрока совпадает со всей введенной строкой, значит идентификатор корректен. В противном случае мы легко находим точку несовпадения и показываем соответствующий символ. // PascalABC.NET 3.1, сборка 1256 от 21.06.2016 begin   var s:ReadlnString('Идентификатор:');   var r:=s.MatchValue('_[A-Za-z_\d]+');   if r=s then Writeln('Корректный идентификатор')   else Writeln('Некорректный символ: ',s[r.Length+1]) end. Тестовые решения: Идентификатор: _A315c_34gAmEsar5 Корректный идентификатор Идентификатор: _A315c_34gшAmEsar5 Некорректный символ: ш
Не нашли ответ?
Ответить на вопрос
Похожие вопросы