Определить, можно ли введенную строку использовать в качестве идентификатора переменной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Определить, можно ли введенную строку использовать в качестве идентификатора переменной.

Решение задачи: «Определить, можно ли введенную строку использовать в качестве идентификатора переменной»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdbool.h>
  5.  
  6. #define isunderscore(x) ((x) == '_')
  7.  
  8. bool IsStartingWithDigit(const char* const s)
  9. {
  10.   if (isdigit(s[0])) return true;
  11.   else return false;
  12. }
  13.  
  14. bool IsLanguageKeyword(const char* const variableName)
  15. {
  16.   static const char* keywords[] = {"auto", "break", "case", "char", "const", "continue", "default",
  17.     "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "inline", "int", "long",
  18.     "register", "restrict", "return", "short", "signed", "sizeof", "static", "struct", "switch",
  19.     "typedef", "union", "unsigned", "void", "volatile", "while", "_Alignas", "_Alignof", "_Atomic",
  20.     "_Bool", "_Complex", "_Generic", "_Imaginary", "_Noreturn", "_Static_assert", "_Thread_local"
  21.   };
  22.    
  23.   static const size_t keywordsCount = sizeof(keywords) / sizeof(*keywords);
  24.  
  25.   bool isKeyword = false;
  26.  
  27.   size_t i = 0;
  28.   while ((i < keywordsCount) && !isKeyword)
  29.   {
  30.     if (strcmp(variableName, keywords[i]) == 0) isKeyword = true;
  31.     i++;
  32.   }
  33.  
  34.   return isKeyword;
  35. }
  36.  
  37. bool HasInvalidCharacters(const char* const variableName)
  38. {
  39.   bool hasInvalidCharacters = false;
  40.  
  41.   size_t i = 0;
  42.  
  43.   const size_t N = strlen(variableName);
  44.  
  45.   while ((i < N) && !hasInvalidCharacters)
  46.   {
  47.     if (!isalnum(variableName[i]) && !isunderscore(variableName[i])) hasInvalidCharacters = true;
  48.     i++;
  49.   }
  50.  
  51.   return hasInvalidCharacters;
  52. }
  53.  
  54. bool IsVariableNameValid(const char* const variableName)
  55. {
  56.   if (!IsStartingWithDigit(variableName) && !HasInvalidCharacters(variableName) &&
  57.     !IsLanguageKeyword(variableName)) return true;
  58.   else return false;
  59. }
  60.  
  61. int main(void)
  62. {
  63.   const char* testNames[] = {
  64.     "testNames",
  65.     "testNames123",
  66.     "testNames_123",
  67.     "testNames$$%123",
  68.     "0123testNames",
  69.     "int"
  70.   };
  71.  
  72.   size_t N = sizeof(testNames) / sizeof(*testNames);
  73.  
  74.   for (size_t i = 0; i < N; i++)
  75.   {
  76.     printf("name: '%s', result = '%s'\n", testNames[i], IsVariableNameValid(testNames[i]) ? "true"
  77.       : "false");
  78.   }
  79.  
  80.   return 0;
  81. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с функциями и строками
  2. Определяем функцию проверки первого символа на символ подчеркивания
  3. Определяем функцию проверки, является ли переменная именем языка (ключевым словом)
  4. Создаем массив с ключевыми словами языка
  5. Определяем функцию проверки наличия недопустимых символов в переменной
  6. Определяем функцию проверки валидности переменной имени
  7. В функции main создаем массив с тестовыми именами переменных
  8. Проверяем каждое тестовое имя на валидность с помощью функции IsVariableNameValid
  9. Выводим результаты проверки на экран
  10. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы