这里我有一个像这样的字符串WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB
我想要删除所有wub
字形式并获得这个结果WE ARE THE CHAMPIONS MY FRIEND
。
在C++中有没有什么特别的功能可以做到这一点,我发现string::erase
,但接力并没有帮助我!
我可以用for
循环做到这一点,并找到这个词形式字符串,然后删除它,但我正在寻找更好的方式。 有没有这样做的功能?如何从C++中删除一个字符串形式的字符串
回答
你可以使用std::regex_replace
:
std::string s1 = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
std::regex target("(WUB)+");
std::string replacement = " ";
std::string s2 = std::regex_replace(s1, target, replacement);
鉴于OP的期望输出,我认为替换字符串应该包含一个空格。 – 2014-09-24 14:51:01
@FredLarson:好点 - 我会更新答案。 – 2014-09-24 14:52:25
啊,更新后的正则表达式会替换一个空格的连续匹配。好工作。 – 2014-09-24 14:55:54
使用boost ::算法:: replace_all
#include <iostream>
#include <string>
#include <boost/algorithm/string/replace.hpp>
int main()
{
std::string input="WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
boost::algorithm::replace_all(input, "WUB", " ");
std::cout << input << std::endl;
return 0;
}
您能否扩展您的答案以举例说明这将如何应用? – 2014-09-24 14:59:52
增加了一个例子 – 2014-09-24 15:09:41
谢谢 - 这是有帮助的。我想这完全不能应付OP的例子,即'WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB' - >'我们是我的朋友们的冠军'? – 2014-09-24 15:11:30
删除所有出现:
#include <iostream>
std::string removeAll(std::string str, const std::string& from) {
size_t start_pos = 0;
while((start_pos = str.find(from)) != std::string::npos) {
str.erase(start_pos, from.length());
}
return str;
}
int main() {
std::string s = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
s = removeAll(s, "WUB");
return 0;
}
替换所有出现:
std::string replaceAll(std::string str, const std::string& from, const std::string& to) {
size_t start_pos = 0;
while((start_pos = str.find(from, start_pos)) != std::string::npos) {
str.replace(start_pos, from.length(), to);
start_pos += to.length();
}
return str;
}
int main() {
std::string s = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
s = replaceAll(s, "WUB", " ");
/* replace spaces */
s = replaceAll(s, " ", " ");
return 0;
}
从问题中的例子看来,OP似乎希望用一个空格替换一个或多个连续出现的“WUB”。 – 2014-09-24 14:57:25
@PaulR code added – 4pie0 2014-09-24 15:02:18
看起来不错,除了“WUBWUB”应该只给一个空间,我认为,不是两个? – 2014-09-24 15:09:09
- 1. 从c字符串中删除字符
- 2. 从字符串中删除字符C
- 3. C从字符串中删除字符
- 4. C++从字符串中删除字符
- 5. 从C字符串中删除字符
- 6. 在C++中删除字符形成一个字符串
- 7. 从一个字符串中删除一个子字符串
- 8. 从字符串中删除字符串
- 9. 从字符串中删除字符串
- 10. 如何从字符串中删除动态字符字符串?
- 11. 如何从C#字符串中删除一些字符?
- 12. 如何从字符串中删除第一个字c
- 13. 如何从字符串中删除多个子字符串?
- 14. 从字符串C#删除点字符
- 15. 如何从C++中的字符串中删除字符?
- 16. 从一个字符串中删除一个子字符串,使用memmove在C
- 17. C删除字符串中的字符
- 18. 删除c字符串中的字符
- 19. 如何从字符串[python]中删除一个字符?
- 20. 如何从字符串中删除一个字符?
- 21. 如何从Python中的字符串中删除字符串?
- 22. 如何从tcl中的字符串中删除子字符串
- 23. 如何从python中的字符串中删除子字符串?
- 24. 如何从javascript中的字符串中删除子字符串?
- 25. 删除一个字符串的字符
- 26. 从字符串中删除字符串模式和符号
- 27. 从另一个字符串中删除字符串中的字符的功能
- 28. 从C中的字符串开头删除子字符串
- 29. 如何从字符串中删除数字符在C#中
- 30. 如何使用C中的baskspace从字符串中删除一个字符?
你可以使用'的std :: regex_replace'? – 2014-09-24 14:42:10
或'boost :: algorithm :: replace_all' – Bogdan 2014-09-24 14:43:11