1

我只是写了一些C++代码,大致如下:—</p>

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]);
}

有什么建议可以纠正上述错误吗?或者有什么更好的编码方式的建议?

4

2 回答 2

6

在 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

于 2012-10-06T18:49:03.270 回答
3

您需要确保条件赋值运算符的两个选项返回相同的类型。试试这个将字符 inp[i] 更改为字符串:

out += (it != mydict.end() ? mydict[inp[i]] : string(1, inp[i]));
于 2012-10-06T18:38:11.010 回答