c++ - 一个 if else 语句将不会执行

标签 c++ dictionary if-statement

下面是我遇到问题的部分

        if(transition == *(vec.end()-1)) { //vec contains the ASCI code
            vec.pop_back();
            --vec_index;
            result.append(vec[vec_index]);
        } else if(colors.find(modified.substr(1)) == colors.end()) {
            cout << result << endl;
            cout << "\033[0;37m";
            cerr << "**ERROR: INVALID CLOSING COLOR TAG ON LINE: "
            //cerr << "**ERROR: OVERLAPPING CLOSING COLOR TAG ON LINE: "
            << nlines << endl;
            exit(0);
        } else {
            cout << result << endl;
            cout << "\033[0;37m";
            cerr << "**ERROR: INVALID CLOSING COLOR TAG ON LINE: "
            //cerr << "**ERROR: OVERLAPPING CLOSING COLOR TAG ON LINE: "
            << nlines << endl;
            exit(0);
        }

在上面的代码中,我的else-if语句好像根本就没有执行。我想做的是当在 map 中找不到 modified.substr(1) 时打印第一个错误,否则(颜色字符串在 map 中但它与 vector 中的最后一个不同)打印“其他”错误。但是,我的 else 案例总是在打印。 modified.substr(1) 的原因是因为 modified(在本例中)以/开头。

最佳答案

transition = colors[modified.substr(1)];

将在 map<> color; 中创建一个条目如果 它不存在 并且值初始化它。这就是为什么你的 else if条件永远不会为真。使用 map::find而不是 operator []找到条目。类似的东西,

map<string,string>::const_iterator it = colors.find(modified.substr(1)];

并使用 it而不是 transition .您可以取消引用 it (作为键的 it->first 和字符串值的 it->second)在需要获取底层 string 时.

关于c++ - 一个 if else 语句将不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729542/

相关文章:

c++ - 静态库性能 - 可以内联调用吗?

c# - 非托管 C++ 代码导致 .Net 应用程序崩溃

c++ - 尝试使用 ostream 保存文件内容时出错

dictionary - 在 fsharp 中交换映射中的键和值

Java程序计算并显示明天的日期

c++ - 改变存储在 QVector 中的结构的状态

javascript - 将python字典输出转换为流程图

javascript - 有没有一种有效的方法来进行不区分大小写的 JavaScript 对象属性名称查找?

JavaScript、nodejs : give a "string not found" messege on console. 日志

shell - shell 中的方括号(测试条件)内容和高级案例陈述