排序文字行的一個簡單程式

    // 程式取自 C IN A NUTSHELL (語法暨程式庫標準辭曲), 範例9-4
    // 目的:從標準輸入讀取文字,依據字母順序排列每一行,然後將結果在標準輸出顯示出來
    //      這樣的常式沒有搬移任何字串:真正被排序的是指標陣列。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    char *getline(void); // 讀取文字
    int str_compare(const void *, const void *);

    #define NLINES_MAX 5         // 文字行的最大數目
    char *linePtr[NLINES_MAX];   // 字元指標的陣列

    int main()
    {
        int n = 0;
        char **p;
        // 讀取 n 行文字
        for ( ; n < NLINES_MAX && (linePtr[n] = getline()) != NULL; ++n )
            ;

        qsort( linePtr, n, sizeof(char *), str_compare);
        system("CLS");
        for ( p = linePtr; p < linePtr+n; ++p )
            puts(*p);

        return 0;
    }

    #define LEN_MAX 80
    char *getline()
    {
        char buffer[LEN_MAX], *linePtr = NULL;
        if ( fgets( buffer, LEN_MAX, stdin ) != NULL )
        {
            size_t len = strlen( buffer );
            if ( buffer[len-1] == '\n' )
                buffer[len-1] = '\0';
            else
                ++len;

            if ( (linePtr = malloc( len )) != NULL )
                strcpy( linePtr, buffer );
        }

        return linePtr;
    }

    int str_compare( const void *p1, const void *p2 )
    {
        return strcmp( *(char **)p1, *(char **)p2 );
    }

 

 

Hosted by www.Geocities.ws

1