1. 程式人生 > 實用技巧 >Alignment of Code UVA - 1593

Alignment of Code UVA - 1593

原題連結

我是智障....看到題目的第一反應是逐個字元判斷,記錄第一行的每個單詞首次出現的位置,然後增加空格,幸好還沒打多久瞄了一眼評論區,大佬們的程式碼20多行AC,這時才反應過來是用stringstream,而且還沒搞懂題目!按列對齊是對齊每列的最大長度單詞...

本題就當複習stringstream了....

注意最後一列單詞不用增加空格

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 vector<string> v[1010];
 4 int t;
 5 int row[200];
 6 int main()
7 { 8 // freopen("in.txt","r",stdin); 9 // freopen("out.txt","w",stdout); 10 stringstream ss; 11 string s,str; 12 while(getline(cin,s)) 13 { 14 ss<<s; 15 while(ss>>str){ 16 v[t].push_back(str);//分割字串 17 } 18 t++; 19 ss.clear();//
?為什麼沒起到作用 20 } 21 for(int i=0;i<t;i++){ 22 for(int j=0;j<v[i].size();j++){ 23 row[j] = max((int)v[i][j].size(),row[j]);//記錄每列單詞的最大值 24 } 25 } 26 for(int i=0;i<t;i++){ 27 for(int j=0;j<v[i].size()-1;j++){ 28 while(v[i][j].size()<row[j]){
29 v[i][j]+=' '; 30 } 31 } 32 } 33 for(int i=0;i<t;i++){ 34 for(int j=0;j<v[i].size();j++){ 35 if(j) cout<<" "<<v[i][j]; 36 else cout<<v[i][j]; 37 } 38 cout<<endl; 39 } 40 return 0; 41 }