如果我有一个字符串abc12df34
,我想用#替换数字并接收abc##df##
。
最糟糕的方法是什么?
据我说,这将是:
http://ideone.com/bcd20z
int main()
{
std::string s = "abc12df34";
std::replace_if(s.begin(), s.end(), [](char c) { return isdigit(c); }, '#');
std::cout << s << std::endl;
return 0;
}
假设至少C++11,我会说for_each带有对单个字符的迭代器发送对字符的引用的lambda函数。不确定它有多快,但是 STL 式的,我想它非常:)
using namespace std;
int main()
{
string text("abc12df34";
for_each(text.begin(), text.end(), [](char ¤t) {if (current >= '0' && current <= '9') current = '#';});
.....
}
编辑:我刚刚阅读了以前的答案。我不知道is_digit,也没有想到std::replace_if。我想这是比我更好的方法。但两者都有效:)
使用 std::transform
将字符串和 lambda 转换为一元谓词。
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string s("abc12df34");
using std::begin;
using std::end;
std::transform(begin(s), end(s), begin(s), [&](char c)
{
return (c >= '0' && c <= '9') ? '#' : c;
});
std::cout << s << "n";
}
为什么不保持简单易读,而不是试图成为"stl-ish":
for (char& ch : str) {
if (isdigit(ch)) ch = '#';
}