Определить, можно ли введенную строку использовать в качестве идентификатора переменной - 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, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д