晚上好!我希望我可以在cout语句中格式化字符串方面请您帮忙。
目标是使所有列的最大宽度向左对齐colWidth
。
在下面的输出中,您将注意到列宽按预期执行,除非字符串长度小于列宽(与库存项目3一样)。如果我更换string(strArray[i].begin(), strArray[i].begin() + colWidth)
用strArray[i]
时,会出现完全相反,其中的任何字符串元素都列在下面最大的罚款,但别的溢出,并推动出来的文字。
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string strArray[20] = {"mumblemumble1","mumblemumblemumble2","mumble3","mumblemumblemumblemumble4","mumblemumblemumble5","mumble6","mumblemumblemumblemumble7","mumblemumblemumble8","mumble9","mumblemumblemumblemumble10","mumblemumble11","mumblemumblemumble12","mumble13","mumblemumblemumblemumble14","mumblemumblemumble15","mumblemumble16","mumblemumblemumble17","mumble18","mumblemumblemumblemumble19","mumblemumblemumble20"};
int cols = 2; // The number of columns to display
int colWidth = 10; // Width allowed for title output
int colCount = 0; // Used with mod (%) to provide a new line when needed
cout << endl << endl << "Number of titles in inventory: " << 20;
cout << endl << endl;
for(int i = 0; i < 20; i++)
{
cout << setw(4) << right << (i + 1) << ") " << left << setw(colWidth) << string(strArray[i].begin(),strArray[i].begin() + colWidth);
if ((i+1) % cols == 0)
cout << endl;
}
return 1;
}
产生以下输出:
Number of titles in inventory: 20
1) mumblemumb 2) mumblemumb
3) mumble3 4) mumblemumb
5) mumblemumb 6) mumble6
7) mumblemumb 8) mumblemumb
9) mumble9 10) mumblemumb
11) mumblemumb 12) mumblemumb
13) mumble13 14) mumblemumb
15) mumblemumb 16) mumblemumb
17) mumblemumb 18) mumble18
19) mumblemumb 20) mumblemumb
string(strArray[i].begin(),strArray[i].begin() + colWidth)
当字符串少于10个字符时(例如'mumble3'),此代码将引发异常。
将您的for循环更改为此:
for (int i = 0; i < 20; i++)
{
string str = strArray[i];
while (str.size() < colWidth) {
str = str + " ";
}
cout << setw(4) << right << (i + 1) << ") " << left << setw(colWidth) << string(str.begin(), str.begin() + colWidth);
if ((i + 1) % cols == 0)
cout << endl;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句