我想比較兩個字符串比較字符串和映射值
一個字符串是一個正常的字符串,我從一個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