• 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("
    ");
    37     }
    38 }
  • 相关阅读:
    Metroid Prime (Wii) Chs 20100120
    刀削面
    胶水帝
    一种新思维,一个新起点
    MP+
    涂鸦
    Metroid Prime (Wii) Chs 20100117
    Cypress 68013 and UMDF
    Metroid Prime Chs 20091010
    process VS thread
  • 原文地址:https://www.cnblogs.com/patrolli/p/11228099.html
Copyright © 2020-2023  润新知