Problem G: 动态的字符串排序

Problem G: 动态的字符串排序

Time Limit: 5 Sec   Memory Limit: 128 MB
Submit: 905   Solved: 154
[ Submit][ Status][ Web Board]

Description

把字符串按照ASCII码序的从小到大排列出来。

串的ASCII码序遵循如下递归定义:

1 两串的前n-1个字符相同,第n个字符ASCII码序小的排在前面;
2 只有两串的字符完全相同时,才有两串相等。

字符的ASCII码序比较可以用strcmp()函数完成。

Input

第一行输入为一个整数N(N<=50,000),后接N行,每行一个字符串,串长不超过100,000。

Output

输出为N行,按照字符串的ASCII码序排列,ASCII码序小的排前面。

Sample Input

10
abc
bc
aca
ca
c
aac
aba
bc
da
ba

Sample Output

aac
aba
abc
aca
ba
bc
bc c
ca
da

HINT

用二维数组很难一次性分配出这么大的空间了,要用到根据输入变化的动态分配的内存才行。这里需要动态的数据结构,比如,字符指针的数组“char *s[]”,或者是二维的字符指针“char **s”,等等。

#include 
#include 
#include 
#include 
#include 
#define M 100010
using namespace std;
char temp[M];
bool cmp(char str1[],char str2[])
{
    return strcmp(str1,str2) < 0;
}
int main()
{
    int N,len,i;
    while(scanf("%d",&N) != EOF){
        char **ch;
        ch = (char **)malloc(sizeof(char *)*(N+1));
        getchar();
        for(i = 0; i < N; i++){
            gets(temp);
            len = strlen(temp) + 1;
            ch[i] = (char *)malloc(sizeof(char)*len);
            strcpy(ch[i],temp);
            memset(temp,0,sizeof(temp));
        }
        sort(ch,ch+N,cmp);
        for(i = 0; i < N; i++){
            puts(ch[i]);
        }
        for(i = 0; i < N; i++){
            free(ch[i]);
        }
        free(ch);
    }
    return 0;
}
 
/**************************************************************
    Problem: 1334
    User: 201401061013
    Language: C++
    Result: Accepted
    Time:172 ms
    Memory:1952 kb
****************************************************************/


你可能感兴趣的:(点滴积累)