Проверка ввода с использованием массива символов в C ++ - PullRequest
0 голосов
/ 13 января 2020

Я создаю программу на C ++ для проверки названия книги с помощью функции на c ++. Функция должна возвращать 1, если ввод действителен, и 0, если ввод недействителен. Название книги может содержать только заглавные, строчные буквы, цвет (:), запятую (,) и пробел (не должно быть последовательных пробелов, запятых и двоеточий). Максимальное количество символов в массиве символов - 60.

Я попробовал следующий способ, но не получил желаемого ответа.

const int MAX_BOOK_NAME = 60;

bool isValidBookName(char bookName[MAX_BOOK_NAME])
{
     int length = strlen(bookName);
     if (length > 59)
     {
          return false;
     }

     for (int i = 0; i < 59; i++)
     {
          if (bookName[i] < 'A' || bookName[i] > 'Z' || bookName[i] < 'a' || bookName[i] > 'z' || bookName[i] != '  ' || bookName[i] != ':' || bookName[i] != ',')
          {
               return false;
          }
     }

     return true;
}

int main()
{
     char arr[60];
     cout << "Please Enter Your Book Id : ";
     cin.getline(arr, 60);
     cout << "Your Entered Name is " << isValidBookName(arr) << endl;
}

Ответы [ 2 ]

2 голосов
/ 13 января 2020
bookName[i] < 'A' || bookName[i] > 'Z' || bookName[i] < 'a' || bookName[i] > 'z'

Эти проверки соответствуют каждому символу, потому что, например, (при условии ASCII или совместимой кодировки) все заглавные буквы соответствуют условию bookName[i] < 'a', а все строчные буквы соответствуют bookName[i] > 'Z'. Поскольку эти проверки используются для сопоставления недопустимого символа, проверка является неправильной.

std::isalpha может значительно упростить вашу программу, как указано в комментариях.

1 голос
/ 13 января 2020

Лог c проверки вашего персонажа некорректен.

Требование в вашем вопросе состоит в том, что каждый символ должен быть буквой, или запятой, или двоеточием, или ... et c. Обратной стороной этого является не «ни буква, ни запятая, ни двоеточие, ни… et c». Реверс "не буква и не запятая и не двоеточие и ... et c. "

...