美文网首页
UVA1593(Alignment of Code)(STL模板

UVA1593(Alignment of Code)(STL模板

作者: myleosu | 来源:发表于2018-06-06 22:07 被阅读0次

    UVA1593传送门
    我快被这道题给气死了。。简直垃圾。。我的输出文件尾最后少了一行被判题姬判为WA,而不是PE,搞得我傻傻的debug了近一个半钟,还去网上看了别人代码没觉得有什么问题,结果错误居然是一个换行符,但没有显示PE!!!
    思路:思路比较简单,利用STL模板即可,记录每一列的最长长度然后较短的字符串右侧补空格,最后一列不用。记住:文件尾有换行符!!!
    一开始的AC代码(暴力模拟,给每个字符串补齐空格)(代码略长):

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <vector>
    
    using namespace std;
    vector<string> str_table[1010];
    int max_size[200];
    
    void str_charge(string&str,int len){
        for(int i = str.length();i<len;i++)
            str+=" ";
    }
    
    int main()
    {
        //freopen("text.txt","r",stdin);
        memset(max_size,0,sizeof(max_size));
        string s;
        int r = 0,max_cowls = 0;
        while(getline(cin,s)){
            for(int i = 0;i<s.length();i++){
                if(s[i]!=' '){
                    int j = i;
                    string x;
                    while(s[j]!=EOF&&s[j]!=' '&&j!=s.length())
                        x+=s[j++];
                    i = j-1;
                    str_table[r].push_back(x);
                }
            }
            max_cowls = max_cowls>str_table[r].size()?max_cowls:str_table[r].size();
            r++;
        }
        for(int i = 0;i<max_cowls;i++){
            for(int j = 0;j<r;j++){
                if(i>=str_table[j].size()) continue;
                max_size[i] = max_size[i]>str_table[j][i].length()?max_size[i]:str_table[j][i].length();
            }
        }
        for(int i = 0;i<max_cowls;i++){
            for(int j = 0;j<r;j++){
                if(i+1>=str_table[j].size()) continue;
                str_charge(str_table[j][i],max_size[i]);
            }
        }
        for(int i = 0;i<r;i++){
            for(int j = 0;j<str_table[i].size();j++){
                cout<<str_table[i][j];
                if(j!=str_table[i].size()-1)
                    cout<<" ";
            }
            cout<<endl;//这个不用判断是否为最后一行!!!
        }
        return 0;
    }
    

    用sstream处理优化后的AC代码:

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <vector>
    #include <iomanip>
    #include <sstream>
    
    using namespace std;
    vector<string> str_table[1010];
    int max_size[200];
    
    int main()
    {
        string s,t;
        int r = 0,c;
        while(getline(cin,s)){
            stringstream ss(s);
            c = 0;
            while(ss>>t){
                max_size[c] = max((int)t.size(),max_size[c]);
                str_table[r].push_back(t);
                c++;
            }
            r++;
        }
        for(int i = 0;i<r;i++){
            int j = 0;
            for(;j<(int)str_table[i].size()-1;j++){
                cout<<left<<setw(max_size[j]+1)<<str_table[i][j];
            }
            cout<<str_table[i][j]<<endl;
        }
        return 0;
    }
    
    

    大写的服气。。没想到被杭电oj坑过最后一行多一换行符后又被UVA坑了最后一行少一换行符。真是被坑到怀疑人生系列

    相关文章

      网友评论

          本文标题:UVA1593(Alignment of Code)(STL模板

          本文链接:https://www.haomeiwen.com/subject/pbiisftx.html