прекращение вызова после выброса экземпляра ‘std :: out_of_range’ what (): basic_string :: erase

string Farfallino::decode(string buff) {

string stringa;
size_t pos;

while(1) {
while(pos = (buff.find("afa"))) {
buff.erase(pos, 3);
buff.insert(pos, "a");
}
while(pos = (buff.find("efe"))) {
buff.erase(pos, 3);
buff.insert(pos, "e");
}
while(pos = (buff.find("ifi"))) {
buff.erase(pos, 3);
buff.insert(pos, "i");
}
while(pos = (buff.find("ofo"))) {
buff.erase(pos, 3);
buff.insert(pos, "o");
}
while(pos = (buff.find("ufu"))) {
buff.erase(pos, 3);
buff.insert(pos, "u");
}
}

return stringa;
}

Я пытаюсь стереть все «afa», «efe», «ifi», «ofo» и «ufu», которые находятся в строке, переданной функции, но это выдает мне эту ошибку.
Я понятия не имею, что я делаю не так ..

1

Решение

Это должно быть что-то вроде этого:

while ((pos = buff.find("x")) != std::string::npos)
{
// ...
}

«Не найдено» сигнализируется возвращением nposне ноль. Ноль будет просто первым персонажем.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]