题目描述
输入若干行代码,要求各列单词的左边界对齐且尽量靠左。
单词之间至少要空一格。每个单词不超过80个字符,
每行不超过180个字符,一共最多1000行。
注意输出时每行的最后一列后面没有空格符。
思路:使用一个二维vector来存储数据(因为列数未知),再建一个数组来存储每列单词长度的最大值.然后对每一行进行遍历然后输出,注意下输出格式,每个单词之间至少有一个空格,最后一列除外.
以前的题目好多都没结束条件,自己在测试时可以加下.
参考代码
#include<bits/stdc++.h>
using namespace std;
vector<string> txt[1000 + 10];//存放每行的字符串
int max_len[180 + 10];//存放每列最大的字符长度
string str,str2;
int row, col;//存放行/列
void print(string s, int len) {
cout << s;
for (int i = 0; i <= len - s.size(); i++) {
cout << " ";
}
}
int main()
{
while (getline(cin, str)) {
col = 0;
stringstream sm(str);
while (sm >> str2) {//将一行中的单词放到vector中. 可以stringstream当成cin.
/*txt[row++][col] = str2;*/ //vector当空间为空时,不能直接用下标赋值.最好使用push_back方法
txt[row].push_back(str2);
max_len[col] = max(max_len[col], (int)str2.size());//这里为啥这样呢???
col++;
}
row++;
}
for (int i = 0; i < row; i++) {//对每行数据进行输出
int j = 0;
for ( ; j < txt[i].size()-1; j++) {
print(txt[i][j], max_len[j]);
}
cout << txt[i][j] << endl;
}
return 0;
}
/* 测试数据
start: integer; // begins here
stop: integer; // ends here
s: string
c: char; // temp
haha //以前的
*/