POJ 1589 Unix ls 排序和字符串处理

来源:互联网 发布:linux支持安装什么软件 编辑:程序博客网 时间:2024/05/22 06:51

http://poj.org/problem?id=1589

//#include <cstring>   //不可以定义string s;可以用到strcpy等函数//using   namespace   std;//#include <string>   //可以定义string s;可以用到strcpy等函数//using   namesapce   std;//#include <string.h>   //不可以定义string s;可以用到strcpy等函数//头文件是<string><cstring><string.h>,用string.length()都是可以的//strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'/0'为止,然后返回计数器值 一般用于字符串数组的长度计数,最后有'\0'#include<iostream>#include<string>#include<algorithm>#include<stdio.h>using namespace std;const int maxcol = 60;const int maxt = 101;string filename[maxt];void print(string a, int len, char extra); int main(){    int n;    while(cin>>n)    {        int M =0;        //找到最长的字符串长度         for(int i = 0; i<n; i++)        {            cin>>filename[i];            M = max(M,(int)filename[i].length());//filenames[i].length();strlen(string)参数是string 不是char          //不加(int)会报错?,为什么        }        //计算行和列        int col = (maxcol - M)/(M+2)+1;        int row = (n - 1)/col +1;        print("",60,'-');        cout<<'\n';         sort(filename,filename + n);        for(int i = 0; i<row;i++)        {            for(int j = 0; j<col;j++)            {                int idx = j *row + i;                if(idx<n)                 print(filename[idx],j == col-1?M:M+2,' ');            }            printf("\n");        }    }    return 0;} void print(string a, int len, char extra){    cout<<a;    for(int i = 0; i<len-a.length();i++)    {        cout<<extra;//长度不足要求len,就用extra字符补充,少几个加几个。     }}
原创粉丝点击