在抛出 'std::out_of_range' what() 的实例后调用的终止:basic_string::擦除

terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::erase

本文关键字:调用 实例 basic 擦除 string 终止 range std out of what      更新时间:2023-10-16
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",但它给了我这个错误。我不知道我做错了什么。

它应该是这样的:

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

"未找到"的信号是返回npos,而不是零。零只是第一个字符。

相关文章: