Удаление последовательных повторяющихся символов из std :: string

0

В настоящее время я пытаюсь удалить повторяющиеся символы. Например:

  • maaaaaaa становится ma
  • aaaaassssdddddd становится asd

Я написал следующий фрагмент кода:

string.erase(remove(string.find_first_of(string[i]) + 1, string.end(), string[i]), string.end());

но, по-видимому, std :: string возвращает указатель на последний + 1 символ строки, а не размер, любые идеи, как я мог удалить строку [i] из моей строки, начиная с позиции рядом с этим символом?

  • 0
    Можете ли вы привести пример ввода и желаемого результата?
  • 0
    входные данные: maaaaaaa выходные данные: ma входные данные: aaasssssssssdddddd выходные данные: asd
Показать ещё 5 комментариев
Теги:
string

1 ответ

1
Лучший ответ

string.find_first_of возвращает целочисленную позицию (и string::npos если не найден). Это несовместимо с std::remove, который ожидает итераторов. Вы можете конвертировать из позиции в итератор, добавив позицию в начало итератора.

char to_remove = string[i];
auto beg = string.begin() + string.find_first_of(to_remove) + 1;
auto new_end = std::remove(beg, string.end(), to_remove); 
string.erase(new_end, string.end());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню