Почему при вводе символа, не принадлежащему множествам, не заходит в 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 шт):

Автор решения: Harry

Вот это, например

'0' <= sentence[i] <= '9'

компилятор рассматривает как

('0' <= sentence[i]) <= '9'

так что больше sentence[i] чем 0 или меньше - мы все равно получим что-то (true или false), меньшее, чем 9 - так что весь результат получается true.

Еще учтите, что массивы и иже с ними ведут счет элементов с 0, так что элемент

sentence[sentence.length()]

не существует. Выход за границы элемента, UB...

→ Ссылка
Автор решения: EOF

В дополнение к ответу @Harry скажу, что чтобы избежать такого длинного условия можно использовать функции из cctype. В Вашем случае подойдёт функция isalnum:

if (!isalnum(sentence[i]) && sentence[i] != ' ')
→ Ссылка