Задать вопрос

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

Задача состоит в том, что беру переменную String(Содержит ФИО сотрудника) и вытаскиваю по порядку каждую букву, и сверяю её по таблице кодировок типа 1251, если это буква НЕ RUS(маленькая,большая, и отдельно стоящие ё), НЕ ENG(маленькая,большая), и это НЕ пробел - то меняю boll на значение false; Почему значение не меняется? а остаётся true5cc72f27df538188467150.png
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Решения вопроса 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);

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 75 000 до 125 000 ₽
JustBusiness Санкт-Петербург
от 130 000 до 150 000 ₽
IForce connect ltd Лондон
от 3 000 до 6 000 €