1. 程式人生 > 其它 >UVa1593 Alignment of Code (程式碼對齊)

UVa1593 Alignment of Code (程式碼對齊)

技術標籤:UVa題解c++字串stl

題目連結: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; }