1 //读入字符串,并排序字符串 2 #include <stdio.h> 3 #include <string.h> 4 #define SIZE 81 5 #define LIM 20 6 #define HALT "" 7 8 void stsrt(char * strings [], int num); //字符串排序函数 9 char * s_gets(char * st,int n); 10 11 int main(void) 12 { 13 char input[LIM][SIZE]; 14 char *ptstr[LIM]; 15 int ct =0; 16 int k; 17 18 printf("Input up to %d lines,and I will sort them.\n",LIM); 19 printf("To stop,press the Enter key at a line‘s start.\n"); 20 21 while(ct<LIM && s_gets(input[ct],SIZE)!= NULL && input[ct][0]!=‘\0‘) 22 { 23 ptstr[ct] = input[ct]; //设置指针指向字符串 24 ct++; 25 } 26 stsrt(ptstr,ct); //字符串排序函数 27 puts("\nHere‘s the sorted list:\n"); 28 for (k=0;k<ct;k++) 29 puts(ptstr[k]); 30 return 0; 31 } 32 33 void stsrt(char *strings [], int num) 34 { 35 char *temp; 36 int top,seek; 37 38 for(top=0;top <num -1;top++) 39 for(seek=top+1;seek<num;seek++) 40 if(strcmp(strings[top],strings[seek])>0) 41 { 42 temp = strings[top]; 43 strings[top] = strings[seek]; 44 strings[seek] = temp; 45 } 46 } 47 48 49 50 char * s_gets(char * st, int n) 51 { 52 char * ret_val; 53 int i=0; 54 55 ret_val = fgets(st, n, stdin); //读取成功,返回一个指针,指向输入字符串的首字符; 56 if(ret_val) 57 { 58 while(st[i]!=‘\n‘ && st[i]!=‘\0‘) 59 i++; 60 if(st[i] ==‘\n‘) //fgets会把换行符也吃进来了,fgets会在末尾自动加上\0; 61 st[i]=‘\0‘; 62 else //其实是‘\0‘ 63 while(getchar() != ‘\n‘) //会把缓冲区后续的字符都清空 64 continue; 65 } 66 return ret_val; 67 }
程序解读:
这个程序的好处是利用字符串指针数组ptstr进行排序,并未改变input,这样也保留了input数组中的原始顺序。这样的做法比直接用strcpy()交换两个input字符串要简单得多。
程序中还出现了,选择排序算法:(selection sort algorithm):其实就是以strcmp函数为基础来冒泡排序指针
C库中有更高级的排序函数:qsort(),该函数使用一个指向函数的指针进行排序比较。
原文地址:https://www.cnblogs.com/grooovvve/p/9938394.html
时间: 2024-10-09 02:21:15