Below is the section I am having trouble with
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);
}
In the above code, my else-if statement does not seem to execute at all. What I am trying to do is when modified.substr(1) is not found in the map is print the first error otherwise (the color string is in the map but it’s not the same one as the last one in the vector) print the “else” error. However, my else case is always printing. The reason why it’s modified.substr(1) is because modified (in this case) starts with a /.
will create an entry in
map<> color;if it’s not existing and value initialize it. That’s why yourelse ifcondition will never be true. Use map::find instead ofoperator []to find the entry. Something like,And use
itinstead oftransition. You can de-referenceit(asit->firstfor key andit->secondfor string-value) when needed to get the underlyingstring.