提问人:F. Andrés 提问时间:5/19/2023 最后编辑:Remy LebeauF. Andrés 更新时间:5/19/2023 访问量:105
为什么要删除空间?c++ .erase()
Why is deleting the space? c++ .erase()
问:
我正在解决代码战中的一个套路,您必须删除感叹号“!
但是,当使用 时,它也会删除空间。我不明白它是如何连续删除三个“!”的。.erase()
这是给我带来问题的字符串:
"Hi! Hello!"
调试,它去:
"HiHello!"
它吃掉了空间,最终成为:
"HiHello"
这个有效,但我不明白在调试它时为什么不出现更多:
"Hello World!!!"
前往:
"Hello World"
我不明白为什么它没有显示为 and"Hello World!!"
"Hello World!"
我以前用于拆分字符串。我明白了,其中 是字符串的开头 包含 和 结尾 是 排除 的,也是 的成员函数。.erase()
.erase(first,second)
first
second
.erase()
std::string
--奖金--
我尝试使用并同样工作。.erase(pos,pos)
这是我的代码:
#include <string>
std::string removeExclamationMarks(std::string str){
std::string remove{ "!" };
std::cerr << str << '\n';
size_t pos{};
while( (pos = str.find(remove)) != std::string::npos ){
std::cerr << pos << '\n';
str.erase(pos, pos + remove.length());
std::cerr << str << '\n';
}
std::cerr << "END\n";
return str;
}
答:
4赞
Vlad from Moscow
5/19/2023
#1
该方法的此调用不正确erase
str.erase(pos, pos + remove.length());
第二个参数指定要擦除的元素数。
所以你需要写
str.erase(pos, remove.length());
请注意,如果你的编译器支持 C++20,那么你可以编写
std::erase( str, '!' );
评论
std::string::erase
str.erase(std::remove(str.begin(), str.end(), '!'), str.end());
std::remove
remove
remove
erase
pos = str.find(remove, pos)
char remove = ‘,’
find