Почему при вводе символа, не принадлежащему множествам, не заходит в if?
Ниже скинул функцию в которой у меня возникла проблема. Она должна редактировать строку удаляя из неё лишние символы если этот символ не пробел, не латинская буква, или не цифра. Но почему-то даже если ввести русскую букву, или любой другой символ не из допустимого множества, то в этот if не заходит.
string editing(string sentence)
{
int i;
i = 1;
while (i <= sentence.length())
{
if (!('0' <= sentence[i] <= '9' || 'A' <= sentence[i] <='Z' || 'a' <= sentence[i] <= 'z' || sentence[i] == ' '))
{
sentence.erase(i, 1);
i--;
}
i++;
}
return sentence;
}
Ответы (2 шт):
Вот это, например
'0' <= sentence[i] <= '9'
компилятор рассматривает как
('0' <= sentence[i]) <= '9'
так что больше sentence[i] чем 0 или меньше - мы все равно получим что-то (true или false), меньшее, чем 9 - так что весь результат получается true.
Еще учтите, что массивы и иже с ними ведут счет элементов с 0, так что элемент
sentence[sentence.length()]
не существует. Выход за границы элемента, UB...
В дополнение к ответу @Harry скажу, что чтобы избежать такого длинного условия можно использовать функции из cctype. В Вашем случае подойдёт функция isalnum:
if (!isalnum(sentence[i]) && sentence[i] != ' ')