Правильно ли задал операции сравнения?

Задача состоит в том, что беру переменную String(Содержит ФИО сотрудника) и вытаскиваю по порядку каждую букву, и сверяю её по таблице кодировок типа 1251, если это буква НЕ RUS(маленькая,большая, и отдельно стоящие ё), НЕ ENG(маленькая,большая), и это НЕ пробел - то меняю boll на значение false; Почему значение не меняется? а остаётся true5cc72f27df538188467150.png
  • Вопрос задан
  • 112 просмотров
Решения вопроса 2
myjcom
@myjcom Куратор тега C++
Дословно
#include<locale>
//...
locale loc(".1251");
if(!isalpha(c, loc) && !isspace(c, loc))
{
  //...
}

win10 VS2017
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
> если это буква НЕ RUS(маленькая,большая, и отдельно стоящие ё), НЕ ENG(маленькая,большая), и это НЕ пробел - то меняю boll на значение false

Здесь ты пишешь "И", а в коде почему-то стоит "ИЛИ".

вдумайся в смысл выражения (c != 32) || (c != 184), оно всегда истинно

И сравнивай стандартными функциями вроде isalpha, в крайнем случае c >= 'a' && c <= 'z', но не с числами, во первых не читаемо, во вторых нет гарантий, что кодировка ascii.

А ещё лучше упростить код так:

bool isValidChar = isAlpha(c) || isDigit(c) || isSomethingElse(c);

сразу понятно, что символ нам подходит только, если удовлетворяет хотя бы одному из условий. А чтоб совсем хорошо было, используй регулярные выражения.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы