小かまどの最初の問題解

18951 ワード

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66858#problem
題意は、必ずしも複数の単語を入力したり、複数の行を入力したりして、左揃えをさせたり、単語間の距離を最小限に抑えたりすることです.
各列の最大長を見つけます.の1つの問題が1日詰まって、とても水ですが、しかしこの点は私が本当にできないとは思いません.定量的ではありませんので、長いとは限らないので、vectorでやったほうがいいです.よく考えてから、どのようにして1列の中で最も長いものを見つけることができて、他の人のコードを見ましたか.
 while(getline(cin,code))     {         stringstream tran(code);      //「文字ストリーム」tranを作成します.次にcinを読み込むようにtranを読み込むだけです.        while(tran>>te)         {             max_len[col]=max(max_len[col],(int)te.size();//比較長さを大きくする.            col++;             txt[row].push_back(te);//各単語を容器に入れます!        }         row++,col=0;     }
各行入力後に各列の長さを更新するのは、このように簡単で、colがループごとにゼロになることが重要で、私がずっと考えていなかった場所でもあります.配列は常にデータを更新し続ける方法ではできないことを実現することができ、時には自分の考えに近いことがあります.
自分の将来の思考が少し活発になることを望んでいます.
コードを添付
#include<sstream>
#include<string>
#include<vector>
#include <cstdio>
#include <iostream>

using namespace std;

vector<string> txt[1314];
string code,te;

int max_len[250];//                 ,      !

void print(string s,int len)
{//     !
    for(int i=0; i<s.size(); i++)
        cout<<s[i];
    for(int i=0; i<=len-s.size(); i++)
        cout<<' ';
    //cout<<'*';
}
int main()
{
    int col=0,row=0;//    ,col      “  ”  !
    while(getline(cin,code))
    {
        stringstream tran(code);//    “    ”——tran,         cin    tran  !
        while(tran>>te)
        {
            max_len[col]=max(max_len[col],(int)te.size());//       。
            col++;
            txt[row].push_back(te);//            !
        }
        row++,col=0;
    }
    for(int i=0; i<row; i++)
    {
        int j=0;
        for(; j<txt[i].size()-1; j++)
            print(txt[i][j],max_len[j]);
        cout<<txt[i][j]<<endl;//               !
    }
    return 0;
}