c++11 是否提供了在 python 中实现的优雅解决方案 maketrans/translate ?
from string import maketrans
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)
str = "this is string example....wow!!!";
print str.translate(trantab);
最佳答案
据我所知,没有内置函数,但你可以想象实现一个:
#include <functional>
#include <string>
#include <unordered_map>
std::function<std::string(std::string)>
maketrans(const std::string& from, const std::string& to) {
std::unordered_map<char, char> map;
for (std::string::size_type i = 0;
i != std::min(from.size(), to.size()); ++i) {
map[from[i]] = to[i];
}
return [=](std::string s) {
for (auto& c : s) {
const auto mapped_c = map.find(c);
if (mapped_c != map.end()) {
c = mapped_c->second;
}
}
return s;
};
}
#include <iostream>
int main() {
const std::string intab = "aeiou";
const std::string outtab = "12345";
const auto translate = maketrans(intab, outtab);
const std::string str = "this is string example....wow!!!";
std::cout << translate(str) << std::endl;
return 0;
}
关于c++ - c++11 是否提供与 python maketrans/translate 中实现的类似的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600042/