是否有一种优雅的方式从字符串中删除字符?
例如,如何从foo123bar
获取字符串123
?
我知道有一些类似的问题,但我的观点是,如果foo
或bar
存在,我就不知道先验。
干杯!
答案 0 :(得分:6)
使用 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
答案 1 :(得分:3)
如果你有一个C ++ 11兼容的编译器,你可以使用std::copy_if
和lambdas:
std::string str = "foo123bar";
std::string dst;
std::copy_if(str.begin(), str.end(), dst.begin(), [](const char ch) { return !isalpha(ch); });
答案 2 :(得分:0)
我认为使用正则表达式对于此任务而言性能太低。尝试:
string filtered;
for (int i = 0; i < str.size(); i++)
{
if (!isalpha(str[i]))
{
filtered.push_back(str[i]);
}
}
之后filtered
将包含您需要的内容。
答案 3 :(得分:0)
迭代string
并打印出非字母字符:
string::iterator iter;
for(iter = myString.begin(); iter != myString.end(); ++iter) {
if (! isalpha((int)*iter))
cout << *iter;
}
答案 4 :(得分:0)
我猜你的意思是从字符串中删除子字符串,而不是删除数字。
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())
}