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 }