题目大意: 输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要有一个空格。每个单词长度不超过80个字符,每行不超过180个字符,一共最多1000行。
题解:
如何输入若干行带空格的数据(不确定有多少行):
问题拆分为:
1.如何读入1行有空格的数据
2.如何连续读入未知行数
可解为:
getline(cin, line) // 读入1行有空格的string为line
while() //连续读入
//则可写为
while (getline(cin, line)) {
...
...
}
如何设置左对齐并设置输出位数
问题拆分为:
1.左对齐
2.设置位数
可解为:
//left为左对齐,setw(len)为设置位数为len位
cout << left << setw(len) << x;
完整代码如下:
#include <bits/stdc++.h>
//#define LOCAL
using namespace std;
vector<string>vec[1005];
int ld[1005];
int main()
{
#ifdef LOCAL
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif // LOCAL
string line,word;
int cnt = 0;
while (getline(cin, line)) {
stringstream ss(line);
int t = 0;
while (ss >> word) {
vec[cnt].push_back(word);
ld[t] = max(ld[t], (int)word.size());
++t;
}
++cnt;
}
for (int i=0; i<cnt; ++i) {
int j = 0;
for (string x : vec[i])
cout << left << setw(j < vec[i].size()-1 ? ld[j++]+1 : 1) << x;
cout << endl;
}
return 0;
}
注意:每一行最后不能有空格
https://vjudge.net/problem/UVA-1593