题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4468
题意:所有单词都左对齐而且每个单词之间至少要空一格,注意每行最后一个单词最后不要空格。
思路:尽量使用c++的操作,主要是两个需要注意,一个就是直接用vector<stirng>来储存整个表,这样就不需要关心每行有多少个单词,第二个就是每列单词的最大长度,直接用一个数组来存,接下来的代码对齐就直接用setioflags和setw来解决,具体可以百度了解这两个的用法。
代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
const int maxn = 1e3 + 5;
vector<string>s[maxn];
int len[200];
int main (){
string line,buf;
int i=0,j=0;
while (getline(cin,line)){
stringstream ss;
ss<<line;
while (ss>>buf){
len[j]=max(len[j],(int)buf.length());
s[i].push_back(buf);
j++;
}
i++;j=0;
}
cout<<setiosflags(ios::left);
for (int k=0;k<i;k++){
for (int l=0;l<s[k].size()-1;l++){
cout<<setw(len[l]+1)<<s[k][l];
}
cout<<s[k][s[k].size()-1]<<endl;
}
return 0;
}