繁体   English   中英

从字符串中删除所有字符

[英]remove all characters from a string

有没有一种优雅的方法可以从字符串中删除字符?
例如,如何从foo123bar获得字符串123

我知道有一些类似的问题,但是我的意思是,我不知道先验是否存在foobar

干杯!

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM