В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
kirill884
kirill884
28.10.2021 17:19 •  Информатика

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

Показать ответ
Ответ:
krokodilol
krokodilol
03.10.2020 18:57
//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
Пример вывода:
Идентификатор
0,0(0 оценок)
Ответ:
yyeyheh
yyeyheh
03.10.2020 18:57
Подобные задачи "по-взрослому" решают с так называемых "регулярных выражений". В данном случае регулярное выражение может быть таким: _[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
Некорректный символ: ш
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота