Имеется строка:
string str = { "hey, Johnny, how is твои дела?" };
нужно избавиться от "русского хвоста". Делаю так, но почему-то строка остается неизменной
void delRussian(string& str)
{
auto i = find_if(str.begin(), str.end(), [](char& a) {
return a >= 128;//начало русских букв в ASCII
});
str.erase(i, str.end());
}
Пробовал и так
void delRussian(string& str)
{
auto i = find_if(str.begin(), str.end(), [](char& a) {
return (a >= 'А' && a <= 'ё');//начало русских букв в ASCII
});
str.erase(i, str.end());
}
Ни в какую.
Подозреваю, что char в вашей системе - знаковый. В таком случае условие a >= 128 никогда не сработает (ибо максимальное целое число, представимое char в таком случае - 127).
Предлагаю такую модификацию:
void delRussian(string& str)
{
auto i = find_if(str.begin(), str.end(), [](char& a) {
return static_cast<unsigned char>(a) >= 128;//начало русских букв в ASCII
});
str.erase(i, str.end());
}
То есть преобразовываем значение к беззнаковому, а потом уж сравниваем.
Или можно преобразовать условие к такому:
!(a > 0 && a <= 127)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Macbook C++ C# Ggdghcdyvxghdfjvdfhcdgvxghcdhbcg
При компиляции открывается консоль, которая выводит два отрицательных восьмизначных числаЧто не так?
Пытаюсь получить доступ к уже существующей bd через Room, но при выполнении кода просходит ошибка