排序文字行的一個簡單程式
//
程式取自 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 );
}