SDUST OJ Problem G 動態的字串排序

deepwzh發表於2016-12-11

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 }

 

相關文章