Определить, можно ли введенную строку использовать в качестве идентификатора переменной - C (СИ)
Формулировка задачи:
Определить, можно ли введенную строку использовать в качестве идентификатора переменной.
Решение задачи: «Определить, можно ли введенную строку использовать в качестве идентификатора переменной»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdbool.h>
- #define isunderscore(x) ((x) == '_')
- bool IsStartingWithDigit(const char* const s)
- {
- if (isdigit(s[0])) return true;
- else return false;
- }
- bool IsLanguageKeyword(const char* const variableName)
- {
- static const char* keywords[] = {"auto", "break", "case", "char", "const", "continue", "default",
- "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "inline", "int", "long",
- "register", "restrict", "return", "short", "signed", "sizeof", "static", "struct", "switch",
- "typedef", "union", "unsigned", "void", "volatile", "while", "_Alignas", "_Alignof", "_Atomic",
- "_Bool", "_Complex", "_Generic", "_Imaginary", "_Noreturn", "_Static_assert", "_Thread_local"
- };
- static const size_t keywordsCount = sizeof(keywords) / sizeof(*keywords);
- bool isKeyword = false;
- size_t i = 0;
- while ((i < keywordsCount) && !isKeyword)
- {
- if (strcmp(variableName, keywords[i]) == 0) isKeyword = true;
- i++;
- }
- return isKeyword;
- }
- bool HasInvalidCharacters(const char* const variableName)
- {
- bool hasInvalidCharacters = false;
- size_t i = 0;
- const size_t N = strlen(variableName);
- while ((i < N) && !hasInvalidCharacters)
- {
- if (!isalnum(variableName[i]) && !isunderscore(variableName[i])) hasInvalidCharacters = true;
- i++;
- }
- return hasInvalidCharacters;
- }
- bool IsVariableNameValid(const char* const variableName)
- {
- if (!IsStartingWithDigit(variableName) && !HasInvalidCharacters(variableName) &&
- !IsLanguageKeyword(variableName)) return true;
- else return false;
- }
- int main(void)
- {
- const char* testNames[] = {
- "testNames",
- "testNames123",
- "testNames_123",
- "testNames$$%123",
- "0123testNames",
- "int"
- };
- size_t N = sizeof(testNames) / sizeof(*testNames);
- for (size_t i = 0; i < N; i++)
- {
- printf("name: '%s', result = '%s'\n", testNames[i], IsVariableNameValid(testNames[i]) ? "true"
- : "false");
- }
- return 0;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями и строками
- Определяем функцию проверки первого символа на символ подчеркивания
- Определяем функцию проверки, является ли переменная именем языка (ключевым словом)
- Создаем массив с ключевыми словами языка
- Определяем функцию проверки наличия недопустимых символов в переменной
- Определяем функцию проверки валидности переменной имени
- В функции main создаем массив с тестовыми именами переменных
- Проверяем каждое тестовое имя на валидность с помощью функции IsVariableNameValid
- Выводим результаты проверки на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д