首页 > 代码库 > SDUST OJ Problem G 动态的字符串排序
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 }
SDUST OJ Problem G 动态的字符串排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。