【发布时间】:2015-07-12 03:32:40
【问题描述】:
晚上好!我希望我可以就 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')。 -
啊 - 我无法在我的终端上看到它。谢谢!
-
这是唯一的问题吗?
-
我相信是这样 - 这是我开始意识到的一个更大问题的一部分,它源于输入文件字符串捕获 \r 从 Windows 文件返回并进一步弄乱了格式。暂时删除上面的问题。感谢您的协助!
-
您可以检查字符串的大小,如果它太小,则添加空格“”,直到它足够长。这应该避免异常并保持您想要的格式。
标签: c++ arrays string formatting cout