作者在 2012-10-29 16:17:20 发布以下内容
/*
*指针数组,数组指针
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getline(void); //读取文字
int str_compare(const void *, const void *);
#define NLINES_MAX 1000 //文字行的最大数目
char *linePtr[NLINES_MAX]; //字符指针的数组
int main(){
//读取行
int n = 0;
for(; n<NLINES_MAX && (linePtr[n]=getline())!=NULL; ++n)
;
if(!feof(stdin)){ //处理错误
if(n==NLINES_MAX){
fputs("sorttext: too many lines.n", stderr);
}else{
fputs("sorttext: error reading from stdin.n", stderr);
}
}else{ //排序和输出
qsort(linePtr, n, sizeof(char*), str_compare); //排序
for(char **p=linePtr; p<linePtr+n; ++p){ //输出
puts(*p);
}
}
return 0;
}
/*
*从stdin读取一行的文字,丢弃结尾的换行符
*返回值:指向所读取字符串的指针、或者文件尾部或者失败时的NULL
*/
#define LEN_MAX 512
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] = '';
}else{
++len;
}
if((linePtr=(char*)malloc(len))!=NULL){ //为此行分配足够的内存
strcpy(linePtr, buffer); //复制此行
}
}
return linePtr;
}
/*
*比较函数,供qsort()使用
*自变量:“指向数组内要被排序的两个元素”的指针
*/
int str_compare(const void *p1, const void *p2){
return strcmp(*(char**)p1, *(char**)p2);
}
*指针数组,数组指针
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getline(void); //读取文字
int str_compare(const void *, const void *);
#define NLINES_MAX 1000 //文字行的最大数目
char *linePtr[NLINES_MAX]; //字符指针的数组
int main(){
//读取行
int n = 0;
for(; n<NLINES_MAX && (linePtr[n]=getline())!=NULL; ++n)
;
if(!feof(stdin)){ //处理错误
if(n==NLINES_MAX){
fputs("sorttext: too many lines.n", stderr);
}else{
fputs("sorttext: error reading from stdin.n", stderr);
}
}else{ //排序和输出
qsort(linePtr, n, sizeof(char*), str_compare); //排序
for(char **p=linePtr; p<linePtr+n; ++p){ //输出
puts(*p);
}
}
return 0;
}
/*
*从stdin读取一行的文字,丢弃结尾的换行符
*返回值:指向所读取字符串的指针、或者文件尾部或者失败时的NULL
*/
#define LEN_MAX 512
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] = '';
}else{
++len;
}
if((linePtr=(char*)malloc(len))!=NULL){ //为此行分配足够的内存
strcpy(linePtr, buffer); //复制此行
}
}
return linePtr;
}
/*
*比较函数,供qsort()使用
*自变量:“指向数组内要被排序的两个元素”的指针
*/
int str_compare(const void *p1, const void *p2){
return strcmp(*(char**)p1, *(char**)p2);
}