为什么我的字符串替换不能在c ++中工作?

时间:2014-08-14 01:42:00

标签: c++

我写了这个循环来替换字符串中的所有引号:

void remQuotes(string& s) {
    while (int x = s.find("\"") != string::npos) {
        s = s.replace(x,1,"");
    }
}

不幸的是,只要参数中有引号,它就会创建一个无限循环。我不明白为什么这不起作用。

1 个答案:

答案 0 :(得分:1)

您的代码可能没有按预期执行。让我们添加相应的括号来显示您的代码的解析方式:

while (int x = (s.find("\"") != string::npos)) {

让我们通过添加正确的括号来修复它:

void remQuotes(string& s) {
    while ((int x = s.find("\"")) != string::npos) {
        s = s.replace(x,1,"");
    }
}

但这会更清楚:

void remQuotes(string& s) {
    while (true) {
        int x = s.find("\"");
        if (x == string::npos)
            return;
        s = s.replace(x, 1, "");
    }
}

但你真的应该这样做:

void remQuotes(string& s) {
    auto it = std::remove(s.begin(), s.end(), '\"');
    s.erase(it, s.end());
}