Удаление определенных символов из строки
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a = "agaga";
while (a.find("a"))
{
a.erase(a.find("a"), 1);
}
cout << a << endl;
}
Не могу понять, почему программа выходит за рамки строки, ведь строго обозначен символ, который надо удалить.
Ответы (2 шт):
эффективнее решить задачу можно с использованием идиомы erase-remove:
std::string a = "agaga";
a.erase(std::remove(a.begin(), a.end(), 'a'), a.end());
std::cout << a << '\n';
обьяснение: remove смещает элементы не равные 'a' в начало строки в том же порядке в каком они были изначально, потом возвращает итератор на первый элемент равный 'a' (эти элементы лежат в хвосте строки), и затем erase затирает ненужные элементы от начала этого итератора и до конца
Программа ни за какие рамки не выходит. Она остается в рамках той программы, что вы написали:
Для данной строки a.find("a") вернет ноль, поскольку символ был найден под нулевым индексом( первый элемент строки), и тело цикла не выполняется...
Если хотите удалить все символы а из строки, то, например так:
for (size_t k = a.find('a'); k != a.npos; k = a.find('a', k ))
{
a.erase(k, 1);
}