我想比较两个字符串比较字符串和映射值
一个字符串是一个正常的字符串,我从一个istringstream有:
string command;
iss >> command;
,另一个是一个字符串,我从得到我的地图。
但它似乎并没有工作。
的想法是,我有一个map<string, string>
,该值是一个 转义码来改变终端输出颜色。
我在我的main
中有一张地图,我把所有的键和值都放到了 (它工作,我测试过了),所以我把地图传递给了这个函数。
我也有我的程序的开头定义的颜色:
#define BLACK "\033[22;30m"
#define RED "\033[22;31m"
#define GREEN "\033[22;32m"
#define BROWN "\033[22;33m"
#define BLUE "\033[22;34m"
#define PURPLE "\033[22;35m"
#define CYAN "\033[22;36m"
#define GREY "\033[22;37m"
#define DARK_GREY "\033[01;30m"
#define LIGHT_RED "\033[01;31m"
#define LIGHT_GREEN "\033[01;32m"
#define YELLOW "\033[01;33m"
#define LIGHT_BLUE "\033[01;34m"
#define LIGHT_PURPLE "\033[01;35m"
#define LIGHT_CYAN "\033[01;36m"
#define WHITE "\033[01;37m"
这是一个似乎并没有被工作和困惑我的部分:
string getColor(string command, map<string, string> &m)
{
string color;
if((m.find(command)->second).compare(RED) == 0)
{
color = RED;
return color;
}
// ...and so on for all the other colors
}
我会作出这样的switch
,但C++不允许在字符串上进行切换。
所以问题是,即使两个字符串都是相同的,它不会像那样工作。
我意识到m.find()
正在我们正在寻找的位置返回一个迭代器。 但是,然后做m.find()->second
应该得到正确的价值? 而且值是一个字符串,不是吗?
所以总之,我不确定为什么比较不起作用。
编辑:
好吧,这里是我说的是配置文件:
bold \e[0;31m
italic \e[0;34m
underline \e[0;32m
default \e[0;37m
这样用户输入会是这样的:
(默认这是一个(大胆的简单)的例子。)
所以当我得到的命令“默认”,我会在我的地图对于搜索字符串,然后得到的C与它相关的代码。
然后我会将输出颜色更改为与默认相关的地图中的颜色。 然后,我将输出颜色更改为在地图“大胆”相关的彩色打印出来的字“简单”,然后我会回到以前的彩色打印出来的句子的其余部分。
而是因为当我这样做:
cout << config.find("bold")->second << " hi" << endl;
它不会改变颜色,它打印出:
\ E [0;31米喜
,而不是改变输出颜色:/
,所以我想我会做一个比较,因为这样的事情:
cout << RED << "hi" << endl;
会打印出你喜欢的红色。
ewwwwwwwwwww宏坏了! – Puppy