Проблема с remove_if (останавливается после нескольких удалений)
Код ниже хочет взять строку и выводить только строчные буквы из английского алфавита.
string simplifyString(string word)
{
word.erase(remove_if(word.begin(), word.end(), [](char letter){return !isalpha(letter);}));
transform(word.begin(), word.end(), word.begin(), tolower);
return word;
}
int main()
{
string s = "a.b.c.d.e.f.g.h.";
cout << simplifyString(s) << endl;;
return 0;
}
Вывод: abcdefgh.fgh
Таким образом, код работает, а затем перестает работать. Что, черт возьми, происходит?
1 ответ
Решение
word.erase(remove_if(...));
Это близко, но не совсем верно. Это удаляет только первый элемент, отложенный remove_if
, Вы хотите удалить весь диапазон:
word.erase(remove_if(...), word.end());