zoukankan      html  css  js  c++  java
  • 算法习题---5.8Unix ls命令(Uva400)

    一:题目

    输入正整数n以及n个文件名,将这n个文件名按照ASCII优先升序排列,按列优先方式左对齐输出。
    注意:文件名最长的为M,那么最右列字符串长度为M,其他列的长度为M+2
    注意:一列最多允许出现60个字符

    (一)样例输入

    10
    tiny
    2short4me
    very_long_file_name
    shorter
    size-1
    size2
    size3
    much_longer_name
    12345678.123
    mid_size_name
    12
    Weaser
    Alfalfa
    Stimey
    Buckwheat
    Porky
    Joe
    Darla
    Cotton
    Butch
    Froggy
    Mrs_Crabapple
    P.D.
    19
    Mr._French
    Jody
    Buffy
    Sissy
    Keith
    Danny
    Lori
    Chris
    Shirley
    Marsha
    Jan
    Cindy
    Carol
    Mike
    Greg
    Peter
    Bobby
    Alice
    Ruben

    (二)样例输出

    ------------------------------------------------------------
    12345678.123         size-1             
    2short4me            size2              
    mid_size_name        size3              
    much_longer_name     tiny               
    shorter              very_long_file_name
    ------------------------------------------------------------
    Alfalfa        Cotton         Joe            Porky        
    Buckwheat      Darla          Mrs_Crabapple  Stimey       
    Butch          Froggy         P.D.           Weaser       
    ------------------------------------------------------------
    Alice       Chris       Jan         Marsha      Ruben     
    Bobby       Cindy       Jody        Mike        Shirley   
    Buffy       Danny       Keith       Mr._French  Sissy     
    Carol       Greg        Lori        Peter                 

    二:代码实现

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    #include <algorithm>
    
    #define MAX 100
    #define MAX_COL 60
    
    using namespace std;
    
    void printStr(const string &str, int len, char ch)
    {
        cout << str;
        for (int i = str.length(); i < len; i++)
            cout << ch;
    }
    
    int main()
    {
        freopen("data5_8.in", "r", stdin);
        freopen("data5_8.out", "w", stdout);
    
        int num,max_len,rows,cols;
        string FileList[MAX];
        while (cin >> num)
        {
            max_len = 0;
            for (int i = 0; i < num; i++)
            {
                cin >> FileList[i];
                FileList[i].length() > max_len ? max_len = FileList[i].length() : max_len;
            }
            //计算行列
            cols = (MAX_COL - max_len) / (2 + max_len) + 1;
            rows = (num - 1) / cols + 1;
            //数据处理,进行排序
            sort(FileList, FileList + num);
            //进行数据输出
            printStr("", 60, '-');
            cout << endl;
            for (int r = 0; r < rows; r++)
            {
                for (int c = 0; c < cols; c++)
                    printStr(FileList[rows*c + r], c == cols - 1 ? max_len : max_len + 2, ' ');
                cout << endl;
            }
        }
    
        freopen("CON", "r", stdin);
        freopen("CON", "w", stdout);
        return 0;
    }
  • 相关阅读:
    UNIX高级环境编程(2)FIle I/O - 原子操作、共享文件描述符和I/O控制函数
    UNIX高级环境编程(1)File I/O
    排序算法(2) 堆排序 C++实现
    加深一下BlockingQueue的认识
    测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
    java中的锁
    Http状态码之:301、302重定向
    学点HTTP知识
    java中的字符串相关知识整理
    在Openfire上弄一个简单的推送系统
  • 原文地址:https://www.cnblogs.com/ssyfj/p/11516673.html
Copyright © 2011-2022 走看看