Проверка корректности строки-идентификатора

Задача

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

Решение

 

Описание переменных: 

  • str - строка, подлежащая проверке; вводится пользователем;
  • flag - переменная-флаг для храниния информации о том, корректена строка-ID или нет.

Тип и константы:

  • t_chs - множество всех возможных символов;
  • lett - множество, содержащее английские буквы и знак подчеркивания;
  • num - множество, содержащее цифры.

Алгоритм решения задачи: 

  1. Если первый символ строки не принадлежит множеству lett, то flag устанавливается в false. (str[1] in lett возвращает false, если символ не принадлежит множеству. Получается выражение not false, которое дает true, и ветка if выполняется. Если символ принадлежит lett, то выражение str[1] возвращает true, отрицание которого в свою очередь дает false.)
  2. Иначе проверяем все символы строки, начиная со второго, на принадлежность объединению множеств lett и num. Как только встречается символ, который не принадлежит данному объединению, то flag устанавливается в значение false и осуществляется прерывание цикла (break).
  3. Если переменная flag имеет значение true, то выводится сообщение о корректном ID, иначе о некорректном.

Программа на языке Паскаль: 

 

type t_chs = set of Char;
const
  lett: t_chs = ['a'..'z','A'..'Z','_'];
  num: t_chs = ['0'..'9'];
var
  str: string;
  i: byte;
  flag: boolean;
begin
  write ('String: ');
  readln(str);
  flag := true;
 
  if not (str[1] in lett) then
    flag := false
  else begin
    i := 2;
    while (i <= length(str)) do begin
      if not (str[i] in lett+num) then begin
        flag := false;
        break;
      end;
      i := i + 1;
    end;
  end;
 
  if flag then
    writeln('The string is CORRECT ID')
  else
    writeln('The string is NOT CORRECT ID');
readln;
end.  

 

Тема

Множества и интервалы

Уровень

Комбинированные задачи

Добавить комментарий