C++ C++;使用cout<;输出到windows终端&书信电报;术语_cc<;颜色、默认值、属性>;在Windows上正确输出颜色和属性,但在Linux上不正确
我以为我已经完成并准备好提交这个小项目,直到我得到这个意想不到的曲线球。 目标是使用令牌lexer生成解析器。 基本上C++ C++;使用cout<;输出到windows终端&书信电报;术语_cc<;颜色、默认值、属性>;在Windows上正确输出颜色和属性,但在Linux上不正确,c++,linux,parsing,colors,C++,Linux,Parsing,Colors,我以为我已经完成并准备好提交这个小项目,直到我得到这个意想不到的曲线球。 目标是使用令牌lexer生成解析器。 基本上 R G B返回红色 将以各自的颜色和属性输出为:“RGB和返回红色” 在windows上一切都很好,但当我将它移到Linux系统时,它会输出颜色代码,而不会发生任何事情 #include <iostream> #include <sstream> #include <stack> #include <map> #include &
R G B返回红色
将以各自的颜色和属性输出为:“RGB和返回红色”
在windows上一切都很好,但当我将它移到Linux系统时,它会输出颜色代码,而不会发生任何事情
#include <iostream>
#include <sstream>
#include <stack>
#include <map>
#include <cstdlib>
#include <vector>
#include "cmd.h"
#include "Lexer.h" // you should make use of the provided Lexer
#include "term_control.h"
#include "error_handling.h"
using namespace std;
map<string, term_colors_t> colorMap;
map<string, term_attrib_t> attribMap;
string display(const string& expression)
{
if(validate(expression) == "VALID") {
Lexer lex;
Token tok;
vector<term_colors_t> colorVect;
vector<term_attrib_t> attribVect;
lex.set_input(expression);
while(lex.has_more_token()){
tok = lex.next_token();
string sTok = tok.value;
if(tok.type == TAG && tok.value.at(0) != '/'){
cout<<term_cc(colorMap[tok.value], DEFAULT_COLOR, attribMap[tok.value]);
colorVect.push_back(colorMap[tok.value]);
attribVect.push_back(attribMap[tok.value]);
}
if(tok.type == TAG && tok.value.at(0) == '/'){
colorVect.pop_back();
cout<<term_cc(colorVect.back(), DEFAULT_COLOR, attribVect.back());
}
if(tok.type != TAG){
cout<<tok.value;
}
}
}
else if(validate(expression) != "VALID") return validate(expression);
return "";
#包括
#包括
#包括
#包括
#包括
#包括
#包括“cmd.h”
#包括“Lexer.h”//您应该使用提供的Lexer
#包括“term_control.h”
#包括“错误处理.h”
使用名称空间std;
地图彩色地图;
地图属性图;
字符串显示(常量字符串和表达式)
{
如果(验证(表达式)=“有效”){
Lexer-lex;
令牌tok;
向量彩色向量;
向量属性向量;
lex.set_输入(表达式);
而(lex.has_more_token()){
tok=lex.next_token();
字符串sTok=tok.value;
if(tok.type==TAG&&tok.value.at(0)!='/')){
cout我不清楚colorMap
和attribMap
在哪里初始化,以及初始化到什么值,我只是出于本能,但是colorMap
的键似乎是颜色,attribMap
的键是属性。在这种情况下,下划线
不是colorMa中的键p
和红色
不是attribMap
中的键
在程序中,您可以执行以下操作:
if(tok.type == TAG && tok.value.at(0) != '/'){
cout<<term_cc(colorMap[tok.value], DEFAULT_COLOR, attribMap[tok.value]);
if(tok.type==TAG&&tok.value.at(0)!='/')){
请问什么是term\u cc
或term\u fg
?您是否使用了一些库?如果是,应该在问题或标签中提及。您的意思是可以对混淆的家伙表示抱歉。您的lexer可以从文件中读取,如果它正确地解释了Windows上的换行符是CRLF的事实吗在Linux上它通常是LF?它从控制台获取输入,因此输入将显示这是红色lexer是由Linux上的老师创建的,我们不会大声触摸它,所以我认为是这样。当它得到一个令牌时,它知道它是一个“标记”,并解析出箭头,返回一个字符串“红色”@MichaelPetch我看不出这个程序在Windows上也能正常工作。它可能会运行,但我怀疑你是否能得到预期的结果。
cout<<term_fg(color)
if(tok.type == TAG && tok.value.at(0) != '/'){
cout<<term_cc(colorMap[tok.value], DEFAULT_COLOR, attribMap[tok.value]);