我正在尝试正确格式化表格,以便在每列的下方打印出值,从该列的第一个字符开始。我已成功格式化了三列,但我无法弄清楚如何格式化K Count和LM Count列,以便以简洁的方式打印出来。
我可以对代码的while循环部分进行哪些更正,以便将K计数和LM计数列整齐打印出来?
void printTable(const vector<int>& z, const vector<long>& x, const
vector<long>& y,
const vector<int>& a, const vector<int>& b)
{
ostringstream ss;
ss << "\n\n\n" << setw(10) << left << "Digits" << "Input Numbers "
<< setw(11) << right << "K Output " << setw(6)
<< right << "K Count " << setw(10) << right << "LM Output " << setw(6)
<< right << "LM Count" << endl;
int i = 0, n = 0;
while (i < 5)
{
string q = to_string(z[2*n]) + " x " + to_string(z[abs(2*n + 1)]);
string r = to_string(x[i]);
string s = to_string(a[i]);
string t = to_string(y[i]);
string u = to_string(b[i]);
ss << setw(10) << left << (i+1) << q
<< setw(16) << right << r
<< setw(11) << right << s
<< setw(12) << right << t
<< setw(10) << right << u << endl;
i++;
n++;
}
string r = ss.str();
cout << r;
}
答案 0 :(得分:1)
您正在打印以下内容:
- 数字左对齐超过10个字符
- 直接后跟输入编号,不指定宽度
- K输出右对齐超过16个字符
您应该改为指定输入数字的宽度
试试这个:
ss << setw(10) << left << (i+1) <<
setw(16) << left << q <<
setw(10) << right << s <<
setw(12) << right << t <<
...
每列的确切宽度可能不正确。亲自尝试一下。
答案 1 :(得分:1)
要修复K Count输出,您应该在设置上一个结果的宽度后重置光标以对齐左边,然后向右移动。这样的事情应该做你想做的事。
ss << setw(10) << left << (i+1) << right
setw(16) << left << q << right <<
setw(11) << left << r << right <<
setw(12) << left << s << right <<
setw(12) << left << t << right <<
setw(10) << left << u << right << endl;