【发布时间】:2015-05-27 11:55:04
【问题描述】:
我仍然很难说出这个问题的标题,看看这段代码:
#include <iostream>
#include <string>
#include <algorithm>
int main(){
std::string s1 = " Hello World 1 ";
std::string s2 = " Hello World 2 ";
while(s1.find(' ') != std::string::npos){
s1.erase(s1.find(' '));
}
while(s2.find(' ') != std::string::npos){
s2.erase(std::find(s2.begin() , s2.end() ,' '));
}
std::cout<<s1<<"\n";
std::cout<<s2;
return 0;
}
我正在使用std::string::find() 来检测字符串中是否存在空格,如果仍然存在,请使用std::string::erase() 删除它们。
我尝试了两种不同的方法:
s1.erase(s1.find(' '));
和
s2.erase(std::find(s2.begin() , s2.end() ,' '));
但是,在第一种方法中,它会在字符串中找到第一次出现的' ' 空格并将其删除以及其后的所有内容。第二种方法按预期工作。
当前输出为:
HelloWorld2
谁能告诉我第一次发生后删除所有内容的第一种方法背后的原因是什么?快速浏览:link
相关链接:
【问题讨论】:
-
标准stl删除方法应该是
s1.erase(std::remove(s1.begin(), s1.begin(), value), s1.end()) -
“前面”是指从空格的位置到字符串的末尾吗?
-
std::string::erase()接受索引和迭代器作为参数。 -
@beaker 我已将输出添加到 answer ,是的。如果第一个字符是空格,它将删除整个字符串。
-
@RemyLebeau 我不明白。你能解释一下吗?可能写一个答案。