d634
輸入說明 :
每個測資點僅一組測資,不必EOF讀檔。 第一行有整數n(1<n<=100000)表示接下來有n張符咒 從第二行開始的n行 每行有一個符咒的名稱,內容可能包含小寫字母、大寫字母、數字、空格字元。 並且每行不超過10個字元
輸出說明 :
請依照"檔案系統"的方法,將這n個符咒排序後的結果輸出。 所謂檔案系統排序就是, 對於兩個英文單字的比較以abc和xyz來說, 先從第一個字母的"ASCII"值開始比, (以這題出現的ASCII來說,空格<數字<大寫字母(A~Z)<小寫字母(a~z)) 如a<x,所以abc在xyz前面。 如果第一個字母相同,則比較下一個字母,如abx對上aby, 比到第三位x<y,所以abx在aby前面。
qsort是一個什麼都能比的函數,但是要比的東西size要固定
strcmp就是ascii code逐位元相減,假如減到某個位元不為0,前面的字串其字元ascii較大,回傳1,反之-1
所以compare函數假如strcmp回傳的函數值為1,那qsort就會交換位置
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare( const void *a, const void *b)
{
return( strcmp((char *)a,(char *)b)>0 );
}
int main()
{
int N;
scanf("%d",&N);
char table[N][11];
int i,j;
getchar();
for(i=0;i<N;i++)
{
gets(table[i]);
}
qsort(table,N,sizeof(char [11]),compare);
for(i=0;i<N;i++)
{
puts(table[i]);
}
return 0;
}