Как применить выравнивание к цветному тексту в выводе c ++ - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь выровнять свой вывод с помощью setw и left в 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"};

У кого-нибудь есть идеи, как исправить этот код, чтобы цвета и выравнивание работали одновременно? Спасибо

1 Ответ

1 голос
/ 02 мая 2020

Если у вас есть строки, которые вы оба хотите отформатировать, а также добавить цветовые коды, то вы можете легко это сделать, передавая последовательности цветовых кодов до потоковой передачи отформатированного текста. Таким образом, цветовые коды и выравнивание не будут мешать друг другу:

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

Если, тем не менее, цветовые коды являются частью строк, то вам придется приложить некоторые усилия, чтобы отделить Строки из цветовых кодов. Будьте осторожны, поскольку не все цветовые коды имеют одинаковое количество символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...