std::string::erase удаляет все символы, следующие за итератором, а не только итератор

#c #string #stl #find #erase

Вопрос:

Я пытаюсь стереть символ из строки. Я попробовал код ниже:

 size_t it = s.find(char(i 97)); //dont mind the i, it is just the int in a for loop.
s.erase(it);
 

Вот тестовый пример:
Ввод: «cccaabababaccbc»
Вывод: «ccc»
Есть какие-нибудь идеи о том, почему это происходит?

Комментарии:

1. Когда вы передаете индекс для стирания, он идет до конца строки. Измените его на s.стереть(it,1). Второй параметр указывает количество символов, которые необходимо удалить. Я предлагаю не называть переменную it, это имя обычно используется для типов итераторов.

2. @RehmaanMomin Большое спасибо, теперь это работает. Не могли бы вы опубликовать свой комментарий в качестве ответа, если это возможно?

Ответ №1:

Когда вы передаете индекс для стирания, он идет до конца строки. Измените его на s.стереть(it,1). Второй параметр указывает количество символов, которые необходимо удалить.

Я предлагаю не называть переменную it, это имя обычно используется для типов итераторов.

Если вы передадите итератор для удаления, то будет удален только этот символ.

Вот документы: https://www.cplusplus.com/reference/string/string/erase/