在主函数中输入5个等长的字符串。用另一个函数对它们进行排序。然后在主函数输出这5个已排好序的字符串。使用指针数组进行处理,字符串不等长。
我们需要考虑使用指针数组,因为指针数组需要指向另外一个数组,因此我们需要定义一个二维数组,通过循环,将指针数组的每一个元素指向二维数组的第0个元素,我们知道,在二维字符数组中,使用arr[i],即可获得第i行的一维数组的首地址。为了练习,本代码使用了指向指针的指针,作为练习使用。代码如下:
#include <stdio.h>
void print(char *[],int); void print_split(int); void sort(char *[],int); int main(int argc,char *argv[]) { int i; char *arr[5],str[5][20],**p; for (i = 0; i < 5; i++) { arr[i] = str[i]; } p = arr; printf("please input 5 string:\n"); for (i = 0;i < 5; i++) { scanf("%s",*p++); } p = arr; print_split(10); printf("the source is :\n"); print(arr,5); print_split(10); printf("the sort result:\n"); sort(arr,5); print(arr,5); system("pause"); return 0; }
void print(char *arr[],int n) { char **p; p = arr; int i; for (i = 0; i < n; i++) { printf("%s\n",*p++); } }
void sort(char *arr[],int n) { char *temp; int i,j,k; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) { if (strcmp(arr[k],arr[j]) > 0) { k = j; } } if(k != i) { temp = arr[i]; arr[i]= arr[k]; arr[k] = temp; } } }
void print_split(int n) { while(n--) { printf("-"); } printf("\n"); }
|
阅读(4087) | 评论(0) | 转发(0) |