为什么我的字符串替换不在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哎呀。