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;
}