我的string::find实现存在一个小问题。

输入是一个长字符串,其中包含以下示例:input =“one_thousand_and_fifty_one”。

我的问题似乎是,在包含多个“和”的输入字符串中,只有第一个和被删除,而其他则没有。

到目前为止,这是我的代码,找到“and”,但仅删除“a”之前的字母不是“s”(表示“千”)时。

string toKill = "and";

size_t andF = input.find(toKill);
    if (andF != string::npos) {
        if (input[(andF - 1)] != 's') {
            input.erase(andF, 4);
        }
    }

编辑:我忘了提及,输入中唯一包含“和”的其他单词是“千”,因此这是一种特殊情况。

最佳答案

试试这个:

string toKill = "and";
size_t andF = 0;

while ((andF = input.find(toKill, andF)) != string::npos) {
    if (andF == 0 || input[andF - 1] != 's') {
        input.erase(andF, 4);
    }
    else ++andF;
}

09-28 02:20