编写一个需要char的函数,如果要删除该字符则返回true,如果要保留则返回false:
bool my_predicate(char c);
然后使用std :: remove_if算法从字符串中删除不需要的字符:
std::string s = "my data";
s.erase(std::remove_if(s.begin(), s.end(), my_predicate), s.end());
根据您的要求,您可能可以使用标准库谓词(如std :: isalnum),而不是编写自己的谓词(您说您需要匹配字母数字字符和空格,因此也许这不完全适合你需要什么)
如果要使用标准库std :: isalnum函数,则需要使用一个转换来消除C标准库头文件< cctype>中的std :: isalnum函数之间的歧义。 (这是你想要使用的)和std :: isalnum在C标准库标题< locale> (这不是你想要使用的,除非你要执行区域设置特定的字符串处理):
s.erase(std::remove_if(s.begin(), s.end(), (int(*)(int))std::isalnum), s.end());
这与任何序列容器(包括std :: string,std :: vector和std :: deque)同样好。这个成语通常被称为“擦除/删除”成语。 std :: remove_if算法也可以使用普通数组。 std :: remove_if只对序列进行单次传递,因此具有线性时间复杂度。