Имеется строка:
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)
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости