zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    10.用户管理
    9.更新系统时间
    8.标准输入输出重定向
    7.文件压缩与find命令
    6.Linux文件的详细属性
    5.Linux基础命令
    4.Linux目录结构
    3.磁盘光驱挂载
    2.xshell连接
    javascript中的location的用法
  • 原文地址:https://www.cnblogs.com/patrolli/p/11228099.html
Copyright © 2011-2022 走看看