编写一个函数,它接受一个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
函数,您将需要进行强制转换来消除之间的歧义std::isalnum
C 标准库头文件中的函数<cctype>
(这是您想要使用的)和std::isalnum
在 C++ 标准库头文件中<locale>
(这不是您想要使用的,除非您想要执行特定于区域设置的字符串处理):
s.erase(std::remove_if(s.begin(), s.end(), (int(*)(int))std::isalnum), s.end());
这对于任何序列容器(包括std::string
, std::vector
and std::deque
)。该习惯用法通常称为“擦除/删除”习惯用法。这std::remove_if
算法也适用于普通数组。这std::remove_if
仅对序列进行一次传递,因此具有线性时间复杂度。