我写了这个循环来替换字符串中的所有引号:
void remQuotes(string& s) {
while (int x = s.find("\"") != string::npos) {
s = s.replace(x,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());
}