Mr.*_*ith 22 c++ string removing-whitespace c++11
在C++中,有一种简单的方法:
这个std :: string
\t\tHELLO WORLD\r\nHELLO\t\nWORLD \t
Run Code Online (Sandbox Code Playgroud)
成:
HELLOWORLDHELLOWORLD
Run Code Online (Sandbox Code Playgroud)
Cas*_*Cow 34
简单的组合std::remove_if和std::string::erase.
不是完全安全的版本
s.erase( std::remove_if( s.begin(), s.end(), ::isspace ), s.end() );
Run Code Online (Sandbox Code Playgroud)
对于更安全的版本替换::isspace用
std::bind( std::isspace<char>, _1, std::locale::classic() )
Run Code Online (Sandbox Code Playgroud)
(包括所有相关标题)
对于使用替代字符类型的版本,请替换<char>为<ElementType>您的模板化字符类型.您当然也可以用不同的语言环境替换语言环境.如果您这样做,请注意避免重新创建区域设置方面的效率太高.
在C++ 11中,您可以使用以下方法将更安全的版本转换为lambda:
[]( char ch ) { return std::isspace<char>( ch, std::locale::classic() ); }
Run Code Online (Sandbox Code Playgroud)
bil*_*llz 13
如果是C++ 03
struct RemoveDelimiter
{
bool operator()(char c)
{
return (c =='\r' || c =='\t' || c == ' ' || c == '\n');
}
};
std::string s("\t\tHELLO WORLD\r\nHELLO\t\nWORLD \t");
s.erase( std::remove_if( s.begin(), s.end(), RemoveDelimiter()), s.end());
Run Code Online (Sandbox Code Playgroud)
或者使用C++ 11 lambda
s.erase(std::remove_if( s.begin(), s.end(),
[](char c){ return (c =='\r' || c =='\t' || c == ' ' || c == '\n');}), s.end() );
Run Code Online (Sandbox Code Playgroud)
PS.擦除remove惯用法使用
| 归档时间: |
|
| 查看次数: |
54486 次 |
| 最近记录: |