【发布时间】: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之前流式传输转义序列,你会没事的。