UVA 1593 Alignment of Code 注意格式问题。。以及可以用stringstream解决但是我没用

本文介绍了一种使用C++进行文本处理的方法,避免了使用较慢的stringstream,通过自定义函数和利用标准库中的string及vector来高效地解析和格式化文本数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好吧,按照刘汝佳书上的说法,stringstream超级慢。。。。所以不想去用,但是老实说感觉用stringstream挺方便的,想了一想,sscanf也不是很好用,结果用了string,以及自己手写。

用了一个vector<string>,以及还有一些格式输出的问题,setw格式化,以及ios里面的位开关,还有读题的重要性。。不能有前缀后缀空格,总之在思维难度上比DP还是要简单很多。。。。放手去写就好了,一下是代码。

#include <string>
#include <iostream>
#include <vector>
#include <iterator>
#include <cctype>
#include <cstring>
#include <iomanip>

using namespace std;

vector<string> v[1005];
size_t words,num[1005],le,ri,line;
string str;

int main(){
    ios_base::sync_with_stdio(false);
    cout.setf(ios::left);
    while(getline(cin,str)){
        for(le=ri=0;ri<str.size();){
            if(le==ri&&str[ri]==' ')
                ++le,++ri;
            else if(le==ri&&isgraph(str[ri]))
                ++ri;
            else if(str[ri]==' ')
                v[line].push_back(string(str.begin()+le,str.begin()+ri)),le=ri;
            else if(isgraph(str[ri]))
                ++ri;
        }
        if(le<str.size()&&isgraph(str[le]))
            v[line].push_back(string(str.begin()+le,str.begin()+ri));
        ++line;
    }

    for(int i=0;i<line;++i)
        words=max(words,v[i].size());


    for(int i=0;i<line;++i)
    for(int j=v[i].size()-1;j>=0;--j)
    num[j]=max(num[j],v[i][j].size());


    for(int i=0;i<line;++i){
        for(int j=1;j<v[i].size()-1;++j)
            cout<<setw(num[j]+1)<<v[i][j];
        cout<<v[i].back()<<endl;
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值