我想去掉字符串中的任何非字母数字字符。我现在使用以下函数,但它肯定不适用于多种语言。有没有对 i18n 友好的方法?
static string StripNonAlphaNum(const string& token) {
string s = token;
// strip away non-alphanumeric parts using a RE expression
RE2::GlobalReplace(&s, "[^A-Za-z0-9]", "");
return s;
}
您可以将擦除删除习惯用语与std::isalnum
谓词一起使用,如下所示:
std::string StripNonAlphaNum(std::string token) {
token.erase(std::remove_if(token.begin(), token.end(),
[](char const &c){ return !std::isalnum(c); }), token.end());
return token;
}
现场演示
同样也可以实现std::wstring
:
std::wstring StripNonAlphaNum(std::wstring token) {
token.erase(std::remove_if(token.begin(), token.end(),
[](char const &c){ return !std::iswalnum(c); }), token.end());
return token;
}
现场演示