Проверка корректности строки-идентификатора
Задача
Проверить введенную пользователем строку на наличие недопустимых символов. В качестве первого символа допустимы только буквы и знак подчеркивания. Остальные символы могут быть буквами, цифрами и знаком подчеркивания.
Решение
Описание переменных:
- str - строка, подлежащая проверке; вводится пользователем;
- flag - переменная-флаг для храниния информации о том, корректена строка-ID или нет.
Тип и константы:
- t_chs - множество всех возможных символов;
- lett - множество, содержащее английские буквы и знак подчеркивания;
- num - множество, содержащее цифры.
Алгоритм решения задачи:
- Если первый символ строки не принадлежит множеству lett, то flag устанавливается в false. (str[1] in lett возвращает false, если символ не принадлежит множеству. Получается выражение not false, которое дает true, и ветка if выполняется. Если символ принадлежит lett, то выражение str[1] возвращает true, отрицание которого в свою очередь дает false.)
- Иначе проверяем все символы строки, начиная со второго, на принадлежность объединению множеств lett и num. Как только встречается символ, который не принадлежит данному объединению, то flag устанавливается в значение false и осуществляется прерывание цикла (break).
- Если переменная 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.