我想删除字符串中的任何非字母数字字符。我现在使用以下功能,但它肯定不适用于多种语言。有一种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;
}
答案 0 :(得分:4)
您可以将删除惯用法与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;
}