Является ли строка идентификатором

Задача

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

Пояснение к задаче и алгоритм решения

При решении задачи следует проверить:

  1. Принадлежит ли первый символ слова множеству английских букв, или является символом подчеркивания?
  2. Принадлежат ли все остальные символы слова множеству английских букв или множеству символов цифр или являются символами подчеркивания?

Если хотя бы один символ не принадлежит указанным множествам, то делается вывод, что слово идентификатором не является. При этом дальнейшую проверку символов можно опустить.

Разные языки программирования включают различные возможности. Поэтому в программах ниже используются немного отличающиеся способы решения данной задачи.

Исходный код на языке программирования Pascal

var
    ch, n: set of char;
    str: string;
    i: byte;
begin
    ch := ['a'..'z','A'..'Z','_'];
    n := ['0'..'9'];
    readln(str);
    if str = '' then exit;
    if not (str[1] in ch) then begin
        writeln('No');
        exit;
    end;
    for i:=2 to length(str) do
        if not ((str[i] in ch) or (str[i] in n)) then begin
            writeln('No');
            exit;
        end;
    writeln('Yes');        
end.

Пример(ы) выполнения программы на языке Pascal

u786
Yes

Особенности решения на языке программирования Pascal

В Паскале есть тип данных "множество" (set), которое легко задается. В данном случае множество ch содержит буквы в обоих регистрах и знак подчеркивания, а множество n - символы цифр.

Сначала проверяется первый символ на принадлежность множеству ch. Если он ему не принадлежит, то программа завершается на этом этапе.

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

Если все символы прошли проверку, то, значит, введенное слово - идентификатор.

Исходный код на языке программирования C

#include <stdio.h>
#include <string.h>
main() {
    char s[100];
    short i, f;
    scanf("%s", s);
    f = 1;
 
    for (i=0; i < strlen(s); i++)
        if (!(s[i] <= 'z' && s[i] >= 'a' ||
              s[i] <= 'Z' && s[i] >= 'A' ||
              s[i] == '_' ||
              s[i] <= '9' && s[i] >= '0') ) {
                printf("No\n");
                f = 0;
                break;
        }
 
    if (f == 1)
        if (s[0] <= '9' && s[0] >= '0')
            printf("No\n");
        else
            printf("Yes\n");    
}

Пример(ы) выполнения программы на языке C

_4ks
Yes

Особенности решения на языке программирования C

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

Исходный код на языке программирования Python

s = input()
if 'a' <= s[0].lower() <= 'z' or s[0] == '_':
    for i in range(1,len(s)):
        if not('a' <= s[i].lower() <= 'z' \
            or '0' <= s[i].lower() <= '9' \
            or s[i].lower() == '_'):
            print('No')
            quit()
    print('Yes')
else:
    print('No')

Пример(ы) выполнения программы на языке Python

max array
No

Особенности решения на языке программирования Python

Метод lower() приводит символ к нижнему регистру.

Цикл проверки символов запускается, если первый символ является буквой или знаком подчеркивания.

Исходный код на языке программирования Basic

алг является ли слово идентификатором
нач
  лит s
  цел i, f
  ввод s
  если не (s[1] >= "a" и s[1] <= "z" или s[1] >= "A" и s[1] <= "Z" или s[1] = "_") то
    вывод "Не идентификатор"
    выход
  все
  f := 1
  нц для i от 2 до длин(s)
    если не (s[i] >= "a" и s[i] <= "z" или s[i] >= "A" и s[i] <= "Z" или s[i] = "_" или s[i] >= "0" и s[i] <= "9") то
      вывод "Не идентификатор"
      f := 0
      выход
    все
  кц
  если f = 1 то
    вывод "Идентификатор"
  все
кон

Пример(ы) выполнения программы на языке Basic

7hg
Не идентификатор

Особенности решения на языке программирования Basic

Сначала проверяется первый символ слова. Если он не принадлежит указанным диапазонам символов, то делается вывод, что слово не является идентификатором, и программа завершается (команда "выход" находится не в цикле, поэтому будет прекращать работу основного алгоритма).

Далее в цикле проверяются остальные символы. Как только встречается символ, не принадлежащий указанным диапазонам, цикл завершается. При этом флаговой переменной присваивается 0. Это делается для того, чтобы понять, завершился цикл путем прерывания или нет. Если цикл не прерывался, флаг останется равным 1. В этом случае слово является идентификатором.

Тема

Строки

Уровень сложности

Средний

Дата публикации