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\n",strs[i]);
23         free(strs[i]);
24     }
25     free(strs);
26     return 0;
27 }
复制代码

 

posted @   deepwzh  阅读(1122)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示