zoukankan      html  css  js  c++  java
  • SDUSTOJ 1334

    题目

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

    AC代码

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define maxn 100000 + 100
    
    char str[maxn];
    int cmp(const void * a, const void * b);
    
    int main(){
        int n;
        while( ~scanf("%d", &n) ){
                getchar();
            char **tmp;
            tmp = (char **)malloc(sizeof(char *) * (n + 10));
            for(int i = 0; i < n; i++)
            {
                gets(str);
                int len = strlen(str) + 1;
                tmp[i] = (char *) malloc(sizeof(char) * (len + 10));
                strcpy(tmp[i], str);
                memset(str, 0, sizeof(str));
            }
            qsort(tmp, n, sizeof(char *), cmp);
            for(int i = 0; i < n; i++)
                puts(tmp[i]);
            free(tmp);
        }
        return 0;
    }
    
    int cmp(const void * a, const void * b)
    {
        return strcmp(*(char**)a, *(char**)b);
    }
  • 相关阅读:
    [ZROI 9.16模拟赛] Tutorial
    [ZROI 9.15模拟赛] Tutorial
    [USACO 2017 Open Gold] Tutorial
    [USACO 2017 Feb Gold] Tutorial
    [USACO 2017 Jan Gold] Tutorial
    [BZOJ 1208] 宠物收养所
    [BZOJ 1500] 维护序列
    多表查询
    sql查询语句查询顺序
    单表查询
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740647.html
Copyright © 2011-2022 走看看