Проблема с 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());
Другие вопросы по тегам