UVa1593 Alignment of Code (程式碼對齊)
阿新 • • 發佈:2021-01-16
題目連結:https://vjudge.net/problem/UVA-1593
思路:
利用stringstream分割字串,從而除掉空格,儲存在vector容器中,與此同時,儲存下來每一列字串的最大長度。輸出的時候要控制好空格的數量,不要出錯~
記得不要再最後一列輸出多餘的空格。
程式碼:
#include <iostream>
#include <vector>
#include <sstream>
#include <cstring>
using namespace std;
void print (string s, int len)
{
len-=s.length(); //總共要輸出len個空格
cout<<s;
while(len--) cout<<' ';
}
int main()
{
vector<string> lines[1005];
string s,t;
int maxlen[185]={0}; // 儲存每列單詞的最長長度
int row=0;
// while( cin >> s ) cin不會讀取空格
while( getline(cin, s) )
{
stringstream ss(s);
int col=0;
while( ss >> t )
{
lines[row].push_back(t); //插入到vector中
if(maxlen[col] < t.length()) maxlen[col] = t.length();
col++;
}
row++;
}
// 處理輸出
for(int i=0 ; i<row ; i++)
{
for(int j=0 ; !lines[i].empty() ; j++)
{
// 要對每行最後輸出的元素做單獨處理,不能讓他們輸出多餘的空格
if( lines[i].size() > 1 ) print(lines[i][0], maxlen[j]+1); // 這裡的+1處理就是讓每列之間保證有一個空格
else cout<<lines[i][0]<<endl;
// 刪除已經輸出的那個元素
lines[i].erase( lines[i].begin() );
}
}
return 0;
}