【问题标题】:How to apply alignment to colored text in c++ output如何在 C++ 输出中对彩色文本应用对齐方式
【发布时间】:2020-05-03 04:20:09
【问题描述】:

我正在尝试将我的输出与 setw 对齐并留在 c++ 中,如下所示:

string s[] = {"S1", "S2", "S10", "S4", "S5", "S11", "S3", "S7"};
for (int i=4; i<=11; i++) {
      for (int j=0; j<8; j++) {
          if (j%2==0) {
              cout << setw(8) << left << s[i-4];
          } else {
              cout << setw(8) << left << "* ";
          }
      }
      cout << endl;
  }

这段代码工作得很好。但是,如果我通过以下方式将颜色添加到文本中,则会弄乱对齐方式。

  string s[] = {"\033[1;31mS1\033[0m", "\033[1;31mS2\033[0m", "\033[1;31mS10\033[0m", "\033[1;31mS4\033[0m", "\033[1;31mS5\033[0m", "\033[1;31mS11\033[0m", "\033[1;31mS3\033[0m", "\033[1;31mS7\033[0m"};

有人知道如何修复此代码,以便同时使用颜色和对齐方式吗?谢谢

【问题讨论】:

  • 您将不得不编写一堆理解转义序列的代码,并考虑到转义序列不占用任何空间来格式化彩色文本。 C++ 库完全不知道转义序列。据它所知,std::cout 转到某个文件。您必须自己完成所有这些工作。
  • 颜色代码必须是原始字符串的一部分,还是可以稍后在写入流时添加它们?
  • @cigien 的建议听起来不错。在setw 之前流式传输转义序列,你会没事的。

标签: c++ colors alignment


【解决方案1】:

如果您有想要格式化的字符串以及添加颜色代码,那么您可以通过流式传输颜色代码序列在流式传输格式化文本之前轻松地做到这一点。。这样,颜色代码和对齐方式就不会相互干扰:

std::cout << "\033[1;31m" << std::setw(8) << std::left  << s[i-4] << "\033[0m";

但是,如果颜色代码是字符串的一部分,那么您将不得不做一些工作来将字符串与颜色代码分开。不过要小心,因为并非所有颜色代码都有相同数量的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2015-12-15
    • 2016-05-28
    • 2017-05-22
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多