【问题标题】:Colorize special words in a string为字符串中的特殊单词着色
【发布时间】:2013-01-05 09:17:57
【问题描述】:

我有一个如下所述的节点链接列表:

class ColorGr
{
    string word;
    string color;
    ColorGr *next;
}

我有一个字符串,我想在其中搜索“单词”并用“颜色”为它们着色。

我尝试使用 ncurses 来执行此操作,但问题在于使用 Windows。我不想刷新屏幕。

我想像cout 函数一样在输出中打印字符串。我的代码是 c++ 语言,我在 linux 中使用 gcc。 最好的方法是什么?

【问题讨论】:

  • Cout 本身无法为您提供帮助,这取决于您打印到的位置。您应该尝试使用 ncurses (lookup cygwin) 或尝试找到适用于 windows cmd 的东西
  • @KarthikT 这只是部分正确。他可以使用iwordpword 成员将格式化状态添加到std::cout,并定义自定义操纵器。或者他可以插入一个自定义的std::streambuf 子类,以便在单词进入屏幕时为其着色。但是对于这个问题,仅 DOS 文本缓冲区支持可能就足够了。

标签: c++ linux colors


【解决方案1】:

在 Windows 上,您可以使用控制台 API 并操纵颜色:

  DWORD dummy = 0;
  const WORD color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; // gray
  HANDLE console = ::GetStdHandle (STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute (console, color);
  WriteConsoleA (console, msg.data (), msg.length (), &dummy, NULL);

more colors here (link)

或者另一种方式,对于 Linux,您可以使用 ANSI color codes(并非所有终端都支持,大多数(Windows 除外)都应该支持。)

例如

  fprintf (stdout, "\e[0;36m" "cyan colored text" "\e[0m");

【讨论】:

  • 谢谢,但是否可以将参数传递给 printf 函数?例如 string s="36m" 并将其传递给函数?
  • 当然有可能:fprintf (stdout, "%s" "cyan colored text" "\e[0m", "\e[0;36m");
【解决方案2】:

就 windows 问题而言,我不知道你是否看过 PDACurses,所以这里有一个 SO 链接以防万一Ncurses workaround for windows

【讨论】:

  • 我在linux中编码,我认为这里有一个误解。无论如何,在我的问题中,我的意思是 ncurses 中的窗口概念而不是 Windows 操作系统,我感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2014-03-25
  • 2015-03-03
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多