캐릭터와 맵 값을 비교 :내가 <p>한 문자열이 내가 istringstream에서 가져온 일반 문자열 두 문자열</p>을 비교하기 위해 노력하고있어
string command;
iss >> command;
다른 하나는 내가로부터 얻을 문자열입니다 내지도.
하지만 작동하지 않는 것 같습니다.
아이디어는 내가 map<string, string>
이고, 값은 이스케이프 코드로 터미널 출력 색상을 변경하는 것입니다.
내 main
에지도가 있는데이 키와 값을 모두 (작동 함, 테스트 함)에 넣었으므로이 기능에지도를 전달합니다.
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
}
나는 이것을을 만들었을 것입니다 :이 작업 나를 혼동되지 않는 것 같다 부분은
#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"
: 나는 또한 내 프로그램의 상단에 색상을 정의
switch
이지만 C++은 문자열에서 스위치를 허용하지 않습니다.
문제는 두 문자열이 같아도 문제가되지 않는다는 것입니다.
m.find()
은 우리가 찾고있는 위치에서 반복자를 반환한다는 것을 알고 있습니다. 그런 다음 m.find()->second
을 수행하는 것이 올바른 가치에 도달해야합니까? 그리고 값은 문자열입니다, 그렇지 않습니까?
간단히 말해서 왜 비교가 효과가 없는지 잘 모르겠습니다.
편집 :
좋아, 여기에 내가 얘기 한 설정 파일은 다음과 같습니다
bold \e[0;31m
italic \e[0;34m
underline \e[0;32m
default \e[0;37m
때문에 사용자 입력은 같은 것입니다 :
은 ((이것은 기본적 굵게 간단한 예).
그래서 "default"명령을받을 때지도에서 해당 문자열을 검색 한 다음 c 그것과 관련된 olour 코드.
그런 다음 출력 색상을 기본값과 연결된지도의 색상으로 변경합니다. 그러면 출력 색상을지도에서 "굵은 글씨"로 표시된 색상으로 변경하여 "simple"이라는 단어를 인쇄 한 다음 이전 색상으로 돌아가 나머지 문장을 인쇄합니다.나는이 작업을 수행 할 때 때문에
하지만
는 :cout << config.find("bold")->second << " hi" << endl;
는 색상을 변경하지 않습니다, 그것은 출력한다 : 전자 [0 \
, 31m 하이
대신 출력을 변경 색깔 :/
그래서 나는 이렇게 할 것이기 때문에 비교를 할 것이라고 생각했다 :
cout << RED << "hi" << endl;
은 빨간색으로 하이를 인쇄합니다.
ewwwwwwwwwww 매크로가 잘못되었습니다! – Puppy