![](/img/trans.png)
[英]Reading std::string, remove all special characters from a std::string
[英]remove all characters from a string
有没有一种优雅的方法可以从字符串中删除字符?
例如,如何从foo123bar
获得字符串123
?
我知道有一些类似的问题,但是我的意思是,我不知道先验是否存在foo
或bar
。
干杯!
使用std :: remove_if算法
这是代码:
#include <string>
#include <algorithm>
#include <iostream>
int main(int argc, char**argv)
{
std::string str("hello123");
str.erase(std::remove_if(str.begin(),str.end(),isalpha),str.end());
std::cout<<str<<std::endl;
return 0;
}
输出将是:
123
如果您具有支持C ++ 11的编译器,则可以使用std::copy_if
copy_if和lamdas:
std::string str = "foo123bar";
std::string dst;
std::copy_if(str.begin(), str.end(), dst.begin(), [](const char ch) { return !isalpha(ch); });
我认为使用正则表达式对于此任务而言性能太差。 尝试:
string filtered;
for (int i = 0; i < str.size(); i++)
{
if (!isalpha(str[i]))
{
filtered.push_back(str[i]);
}
}
之后, filtered
将包含您所需要的内容。
遍历string
并打印出非字母字符:
string::iterator iter;
for(iter = myString.begin(); iter != myString.end(); ++iter) {
if (! isalpha((int)*iter))
cout << *iter;
}
我猜您的意思是从字符串中删除子字符串,而不是数字。
string str = "foo123bar";
string sub = "123";
for (auto it = std::search(str.begin(), str.end(), sub.begin(), sub.end());
it != str.end();
it = std::search(str.begin(), str.end(), sub.begin(), sub.end())) {
str.erase(it, it + sub.size())
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.