我刚写了一些大致如下的C ++代码: -
int i;
string out;
map<char, string>::const_iterator it;
for (i = 0; i < inp.size(); ++i) {
it = mydict.find(inp[i]);
if (it != mydict.end())
out += mydict[inp[i]];
else
out += inp[i];
}
我没有写很多C ++代码,我正在寻找改进相同的建议。我尝试了以下内容,但收到incompatible operand types ('mapped_type' (aka 'std::basic_string<char>') and 'char')
错误:
int i;
string out;
map<char, string>::const_iterator it;
for (i = 0; i < inp.size(); ++i) {
it = mydict.find(inp[i]);
out += (it != mydict.end() ? mydict[inp[i]] : inp[i]);
}
有任何纠正上述错误的建议吗?或者有什么建议可以更好地编写相同的代码?
答案 0 :(得分:5)
在C ++ 11中,您可以简化循环结构本身:
for (char c: inp) {
auto it = mydict.find(c);
it != mydict.end() ? out += it->second : out += c; // little known use ;)
}
除此之外,我建议您使用it->second
而不是再次执行c
的查找。
答案 1 :(得分:3)
您需要确保条件赋值运算符的两个选项都返回相同的类型。尝试将字符inp [i]更改为字符串:
out += (it != mydict.end() ? mydict[inp[i]] : string(1, inp[i]));