删除字符串中的所有字符
是否有从字符串中删除字符的优雅方法?
例如,我如何从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
正是我在找的东西!谢谢! – ezdazuzena 2012-02-15 11:06:21
这里有一个问题,它是UB传递一个负值(EOF除外)到'isalpha','char'可能是一个签名类型。但是你可以很容易地写一个函数来正确调用'isalpha',并用它来代替'isalpha'。在实践中,我认为实现倾向于接受'char'值为负的'char'值,并给出明智的答案,即使他们不需要。 – 2012-02-15 11:59:29
我认为使用正则表达式对于此任务来说性能太低。尝试:
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;
}
如果你有一个C++ 11能够编译器,你可以使用std::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); });
非常整齐美观的解决方案,有点偏离主题,但哪些编译器支持C++ 11(这是否意味着符合2011年的新标准?) – 2012-02-15 10:42:05
@BorisStrandjev As far据我所知,GCC 4.6相当新,应该像Visual C++ 2010一样。 – 2012-02-15 10:45:29
@BorisStrandjev:有一个相当有用的总结[这里](http://wiki.apache.org/stdcxx/C++xxCompilerSupport) – 2012-02-15 11:22:37
我猜你的意思是从字符串中删除一个子字符串,而不是删除数字。
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())
}
我的意思是删除'foo'和'bar' ..不知道确切的'123'。 。也可以是'456' – ezdazuzena 2012-02-15 10:57:29
你能否具体谈谈什么'123'是什么?它是一个已知位置的子字符串,还是一串字母中的数字序列?那么'f1o2o3b4a5r'怎么样,你需要能够将它转换为'foobar',还是数字需要连续? – dasblinkenlight 2012-02-15 10:40:02
@dasblinkenlight:正如我写的:我可能在前面有一些字符,并且在'123'部分后面可能有一些字符。 – ezdazuzena 2012-02-15 10:42:12
@ezdazuzena:如果你只是想知道“123”是否出现在字符串中,你可以使用'std :: search'。假设输入字符串是'“foo1234bar”':是你想要的“4”部分还是“后面的一些字符”的一部分?回答这个问题的人目前正在猜测你真正想要什么,如果你告诉他们会更好。 – 2012-02-15 11:02:00