UVA1593(紫书第五章课后习题)(两个函数:getline(),,,stringstream(),,,,)

 //它的策略是忽略空格(这一点是用输入格式实现的),然后记录每个单词对应的最大长度(不同行,但是相同次序的单词,对应的最大长度)。
//学到的东西:1 这种解题策略。2 两个函数:getline(),,,stringstream(),,,,
//通过这个题复习的东西:1 vector(这个题里,每个元素都是一个vector容器)2 max函数

 原博主写的代码:

//它的策略是忽略空格(这一点是用输入格式实现的),然后记录每个单词对应的最大长度(不同行,但是相同次序的单词,对应的最大长度)。
//学到的东西:1 这种解题策略。2 两个函数:getline(),,,stringstream(),,,,
//通过这个题复习的东西:1 vector(这个题里,每个元素都是一个vector容器)2 max函数
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
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++)//输出空格的数量是:len-s.size()+1,因为要多输出一个空格来空开单词呀
        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++)//vector中元素的下标是从0开始的,左闭右开。
            print(txt[i][j],max_len[j]);
        cout<<txt[i][j]<<endl;//每行的最后一列是不用输出空格的!
    }
    return 0;
}

我自己写的代码(虽然并没有太多不同):(wa了一次,错的原因是没让最后一行输出完后输出换行符

PS:紫书上说,在算法比赛里,最后一行都要输出换行符。(所以以后就不用考虑这种情况了,^.^)

#include<iostream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;
vector<string> v[10005];
string s,t;
int max_len[255];//记录每个单词对应的最大长度
int row,word;//记录总行数,以及每一行的单词数
void print(string str,int len)
{
    cout<<str;
    for(int i=0;i<=len-str.size();i++)
        cout<<" ";
}
int main()
{
    row=0,word=0;
    while(getline(cin,s))
    {
        stringstream tan2(s);//不了解:需要的头文件,使用机制
        while(tan2>>t)
        {
            v[row].push_back(t);
            max_len[word]=max(max_len[word],(int)t.size());
            word++;
        }
        row++; word=0;
    }
    for(int i=0;i<row;i++)
    {
        int j=0;
        for(;j<v[i].size()-1;j++)
            print(v[i][j],max_len[j]);
        cout<<v[i][j]<<endl;
        //if(i!=row-1) cout<<endl;
    }
    return 0;
}
发布了77 篇原创文章 · 获赞 11 · 访问量 5009

猜你喜欢

转载自blog.csdn.net/qq_43346054/article/details/100746833