以下是我遇到问题的部分
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语句似乎根本不执行。我想要做的是当在地图中找不到modified.substr(1)时打印第一个错误否则(颜色字符串在地图中但它与向量中的最后一个不同)打印“别的”错误。但是,我的其他情况总是打印。之所以修改它.substr(1)是因为修改(在这种情况下)是以/.
开头的答案 0 :(得分:2)
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
表示字符串值。
答案 1 :(得分:1)
在您的代码中vec
为空,所以
if(transition == *(vec.end()-1))
导致未定义的行为。