c++中的字符串中删除空格
默认情况下,下面的字符被视为空白字符:
1 | 1. 空格 ' ' |
std::remove_if
算法实际上并不从字符串中删除字符,而是移动所有“给定谓词”字符到前面,并返回一个指向结束位置的迭代器。然后我们可以通过调用 std::erase
来删除给定的谓词
使用
std::isspace
1
2std::string str = "Hello \n\n world\n";
s.erase(std::remove_if(s.begin(), s.end(), ::isspace), s.end());自己实现
1
2
3
4
5
6bool isSpace(unsigned char c) {
return (c == ' ' || c == '\n' || c == '\r' ||
c == '\t' || c == '\v' || c == '\f');
}
std::string s = "Hello \n\nWorld";
s.erase(std::remove_if(s.begin(), s.end(), isSpace), s.end());lambda
1
2
3
4
5
6s.erase(std::remove_if(s.begin(), s.end(),
[](char c) {
return (c == ' ' || c == '\n' || c == '\r' ||
c == '\t' || c == '\v' || c == '\f');
}),
s.end());使用
std::regex_replace
功能正则表达式中,
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。1
2
3std::string s = "hello \n World \r";
std::regex r("\\s+");
s = std::regex_replace(s, r, "");boost 库功能
1
2std::string s = "hello world";
boost::algorithm::erase_all(s, " ");