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

为什么我的字符串替换不在C++中工作?,c++,C++,我编写此循环是为了替换字符串中的所有引号: void remQuotes(string& s) { while (int x = s.find("\"") != string::npos) { s = s.replace(x,1,""); } } 不幸的是,一个参数中有引号,它就创建了一个无限循环。我不明白这为什么不起作用。您的代码可能没有达到预期效果。让我们添加适当的括号来显示如何解析代码: while (int x = (s.find("\"") !

我编写此循环是为了替换字符串中的所有引号:

void remQuotes(string& s) {
    while (int x = s.find("\"") != string::npos) {
        s = s.replace(x,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());
}

因为操作员优先权。这在我的机器上起作用,实际上有点;asdf变为AFTH实际上并没有回答我的问题。您的代码是:while int x=s.find\!=字符串::npos{,这很可能是您想要的。为什么我不能在int x=s周围加上括号呢?find\?@msknapp:这正是我在答案中得到的结果。@msknapp!=的优先级高于=所以首先计算比较,然后将结果分配给x。因为比较总是计算为真,所以x总是真的。这会导致无穷大的l哎呀。