• SDUST OJ Problem G 动态的字符串排序


    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”,等等。

    Append Code

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 char s[100000 +10];
     5 int cmp(const void *a,const void *b){
     6     char * s1=*((char **)a);
     7     char * s2=*((char **)b);
     8     if(strcmp(s1,s2)>0)return 1;else return 0;
     9 }
    10 int main(){
    11     int N;
    12     scanf("%d",&N);
    13     gets(s);
    14     char ** strs=(char **)malloc(sizeof(char *)*N);
    15     for(int i=0;i<N;i++){
    16         gets(s);
    17         strs[i]=(char *)malloc(sizeof(char)*(strlen(s)+5));
    18         strcpy(strs[i],s);
    19     }
    20     qsort(strs,N,sizeof(char *),cmp);
    21     for(int i=0;i<N;i++){
    22         printf("%s
    ",strs[i]);
    23         free(strs[i]);
    24     }
    25     free(strs);
    26     return 0;
    27 }
  • 相关阅读:
    常数时间国密算法
    A Guide to the Go Garbage Collector
    并发控制 互斥
    词典遍历顺序
    max size of IPv4 & IPv6 packet 包大小
    BufferOverflow Attacks
    unsigned 是表示无符号数据类型,
    回溯 递归 的回退状态
    抖音平台多产物代码隔离技术的实践与探索
    依赖注入 开发效率
  • 原文地址:https://www.cnblogs.com/Wade-/p/6159295.html
Copyright © 2020-2023  润新知