从字符串中删除所有字符

时间:2012-02-15 10:32:46

标签: c++ string

是否有一种优雅的方式从字符串中删除字符?
例如,如何从foo123bar获取字符串123

我知道有一些类似的问题,但我的观点是,如果foobar存在,我就不知道先验。

干杯!

5 个答案:

答案 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())
     }