Исходный код
bool IsBukva(char symbol)
{
switch(symbol)
{
case 'a':return 1;break;
case 'b':return 1;break;
case 'c':return 1;break;
case 'd':return 1;break;
case 'e':return 1;break;
case 'f':return 1;break;
case 'g':return 1;break;
case 'h':return 1;break;
case 'i':return 1;break;
case 'j':return 1;break;
case 'k':return 1;break;
case 'l':return 1;break;
case 'm':return 1;break;
case 'n':return 1;break;
case 'o':return 1;break;
case 'p':return 1;break;
case 'q':return 1;break;
case 'r':return 1;break;
case 's':return 1;break;
case 't':return 1;break;
case 'u':return 1;break;
case 'v':return 1;break;
case 'w':return 1;break;
case 'x':return 1;break;
case 'y':return 1;break;
case 'z':return 1;break;
case 'A':return 1;break;
case 'B':return 1;break;
case 'C':return 1;break;
case 'D':return 1;break;
case 'E':return 1;break;
case 'F':return 1;break;
case 'G':return 1;break;
case 'H':return 1;break;
case 'I':return 1;break;
case 'J':return 1;break;
case 'K':return 1;break;
case 'L':return 1;break;
case 'M':return 1;break;
case 'N':return 1;break;
case 'O':return 1;break;
case 'P':return 1;break;
case 'Q':return 1;break;
case 'R':return 1;break;
case 'S':return 1;break;
case 'T':return 1;break;
case 'U':return 1;break;
case 'V':return 1;break;
case 'W':return 1;break;
case 'X':return 1;break;
case 'Y':return 1;break;
case 'Z':return 1;break;
default: return 0;
}
}
Что не так в этом коде
Здесь проигнорированы сразу несколько типовых подходов.
- После оператора
return
нет смысла добавлять операторbreak
— после первого сразу произойдёт выход из функции, соответственно, проход по операторамcase
тоже прервётся:
switch (symbol)
{
case 'a': return 1;
- Нет смысла ставить
return
после каждогоcase
: несколько подрядcase
могут сопровождаться одним на всех действием, именно поэтому обычноcase
работает в паре сbreak
.
switch (symbol) {
case 'a':
case 'b':
// ...
case 'Z':
return1;
}
- Обычно при выяснении принадлежности символа к некоему диапазону пользуются фактом, что символ — это просто другое представление обычных чисел в языках C/C++, и можно символы сравнивать между собой и с числами через операции больше/меньше. Чтобы этот трюк сработал, нужно знать, в какой кодировке представлен текст. В широко распространённой кодировке ASCII латинские символы a-z и A-Z идут подряд, поэтому можно сравнивать исследуемый символ только с первыми и последними символами последовательностей:
return symbol >= 'a' && symbol <= 'z' || symbol >= 'A' && symbol <= 'Z';
- И наконец, смешение английских и русских слов: такое обычно не приветствуется. Поэтому функцию следовало назвать
IsLetter
, а учитывая, что подразумеваются только латинские буквы —IsLatinLetter
.