Uva1593 代码对齐

题目描述:对代码进行对齐,具体形式参看输入输出。

思路:

1. 用getline()读取每一行,再将每一行单词存入一个vector之中

2. 再用一个vector存放每一行的vector

3. 需要找的是每一行对应位置(pi)的单词的最大长度,其它行对应的单词都是按这个最大长度来对齐(填充空格)。找到这个最大长度,减去前一个单词的长度,就是在输出当前单词时需要先填充的空格个数。

代码:

 1 #include <vector>
 2 #include <set>
 3 #include <string>
 4 #include <sstream>
 5 #include <iostream>
 6 
 7 using namespace std;
 8 
 9 int main()
10 {
11     //freopen("in.txt","r", stdin);
12     //freopen("out.txt","w",stdout);
13     string s;
14     vector<vector<string> > allword;          
15     vector<int> pos;     //每行第i个单词的起始位置(相对于前一个单词) 
16     pos.push_back(0);
17     while(getline(cin, s)){
18         string word;
19         vector<string> wvec;   //存放每一行的单词 
20         int cnt = 0;
21         stringstream ss(s);
22         while(ss >> word){
23             wvec.push_back(word);
24             cnt++;
25             if(cnt > 1 && cnt > pos.size()) pos.push_back(word.size() + 1);  //在存入单词的同时就考虑每个单词大小,
26             else if(word.size() + 1 > pos[cnt]) pos[cnt] = word.size() + 1;    //找到每行第i位置上最大单词长度是多少 
27         }
28         allword.push_back(wvec);
29     }
30     for(int i = 0; i < allword.size(); ++i){
31         printf("%s", allword[i][0].c_str()); //第1个单词 
32         for(int j = 1; j < allword[i].size(); ++j){
33             for(int k = 0; k < pos[j] - allword[i][j-1].size() ; ++k) printf(" ");  //在打印单词前输出若干空格
34             printf("%s", allword[i][j].c_str()); 
35         }
36         printf("\n");
37     }
38 }

 

posted @ 2019-07-22 20:08  patrolli  阅读(150)  评论(0编辑  收藏  举报