@Unix is 命令

@Unix is 命令

输入正整数n以及n个文件名,排序后按列优先的方式左对齐输出。假设最长文件名有M字符,则最右列有M字符,其他列都是M+2字符。

附加条件每行最多输出60个字符,在此条件下要求行最少。
Sample input

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

Sample output


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

复制代码

#include
#include
#include
using namespace std;
const int maxcol=60;
const int maxn=100+5;
string filenames[maxn];
//输出字符串s,长度不足len时补字符extra
void print(const string&s,int len,char extra)
{
cout<<s;
for(int i=0;i<len-s.length();i++)cout<<extra;
}
int main()
{
while(1){
int n;
while(cin>>n){
int m=0;
for(int i=0;i<n;i++){
cin>>filenames[i];
m=max(m,(int)filenames[i].length()); //stl中的max,传入两个参数,返回最大值
}
//计算列数cols和行数rows
int cols=(maxcol-m)/(m+2)+1,rows=(n-1)/cols+1;
print("",60,’-’); //调用函数,输出60个‘-’
cout<<endl;
sort(filenames,filenames+n); //字典序排列
for(int r=0;r<rows;r++){
for(int c=0;c<cols;c++){ //顺序竖着看,但要横行输出
int idx=c*rows+r;
if(idx<n)print(filenames[idx],c==cols-1?m:m+2,’ '); //最后一列m个字符,其余m+2个字符
}
cout<<endl;
}
}
}
//system(“pause”);
return 0;
}输入正整数n以及n个文件名,排序后按列优先的方式左对齐输出。假设最长文件名有M字符,则最右列有M字符,其他列都是M+2字符。

附加条件每行最多输出60个字符,在此条件下要求行最少。
Sample input

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

Sample output


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

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int maxcol=60;
const int maxn=100+5;
string filenames[maxn];
                                              //输出字符串s,长度不足len时补字符extra
void print(const string&s,int len,char extra)
{
    cout<<s;
    for(int i=0;i<len-s.length();i++)cout<<extra;
}
int main()
{
    while(1){
        int n;
        while(cin>>n){
            int m=0;
            for(int i=0;i<n;i++){
                cin>>filenames[i];
                m=max(m,(int)filenames[i].length());      //stl中的max,传入两个参数,返回最大值
            }
                               //计算列数cols和行数rows
            int cols=(maxcol-m)/(m+2)+1,rows=(n-1)/cols+1;
            print("",60,'-');           //调用函数,输出60个‘-’
            cout<<endl;
            sort(filenames,filenames+n);                //字典序排列
            for(int r=0;r<rows;r++){
                for(int c=0;c<cols;c++){                     //顺序竖着看,但要横行输出
                    int idx=c*rows+r;
                    if(idx<n)print(filenames[idx],c==cols-1?m:m+2,' ');            //最后一列m个字符,其余m+2个字符
                }
                cout<<endl;
            }
        }
    }
    //system("pause");
    return 0;
}`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值