1.  
  2. /*  
  3.  
  4. 本文件实现字符串排序,对多个字符串进行排序,  
  5. 并且首先按首字母排序,  
  6. 如果首字母相同,则比较第二个字母,以此类推  
  7.  
  8. */ 
  9.  
  10.  
  11. #include <stdio.h>  
  12.  
  13. //定义一个结构体,来保存首字母相同的字符串的地址  
  14. typedef struct {  
  15.     char * CINIT1;  
  16.     char * CINIT2;  
  17. }STRSTING;  
  18. STRSTING exchange;  
  19. char * TempCmp;  
  20.  
  21. void strcmp_str1_str2(char * str1,char * str2);  
  22. void strsort(char *str[],int n);  
  23.  
  24. //函数从这里开始  
  25. int main ()  
  26. {     
  27.     char * str[]={"adf","abf","cdb","abfc","hfdfg","zadf"};  
  28.     strsort(str,6);  
  29. }  
  30.  
  31. void strsort(char *str[],int n)  
  32. {  
  33.     int i,j;  
  34.     char * temp;  
  35.  
  36.             for (i=0;i<n-1;i++)  
  37.             {  
  38.                 for (j=i+1;j<n;j++)  
  39.                 {  
  40.                     if (*str[i]>*str[j])  
  41.                     {  
  42.                         temp=str[i];  
  43.                         str[i]=str[j];  
  44.                         str[j]=temp;  
  45.                     }else if (*str[i]==*str[j])   //如果首字母相等则进入,其他字母比较  
  46.                     {  
  47.                         exchange.CINIT1=str[i];  
  48.                         exchange.CINIT2=str[j];  
  49.                         strcmp_str1_str2(str[i],str[j]);  
  50.                         str[i]=exchange.CINIT1;  
  51.                         str[j]=exchange.CINIT2;  
  52.                     }  
  53.                 }  
  54.             }  
  55.  
  56.     //打印测试  
  57.     for (i=0;i<n;i++)  
  58.     {  
  59.     printf("字符串%d:%s\n",i,str[i]);  
  60.     }  
  61.  
  62.  
  63. }  
  64.  
  65.  
  66. //本函数实现首字母相同的字符串,进行比对之后的字符串  
  67. //功能说明:如果接下来的字符串1字母大于字符串2字母则交换地址返回,如果相等则继续下一个字母比较,如果小于则返回  
  68. void strcmp_str1_str2(char * str1,char * str2)  
  69. {  
  70.  
  71.         if (*str1>*str2)  
  72.         {  
  73.             TempCmp=exchange.CINIT1;  
  74.             exchange.CINIT1=exchange.CINIT2;  
  75.             exchange.CINIT2=TempCmp;  
  76.         }else if (*str1==*str2)  
  77.         {  
  78.             if (*str1!='\0' || *str2!='\0')  
  79.             {  
  80.             str1++;  
  81.             str2++;  
  82.             strcmp_str1_str2(str1,str2);  
  83.             }  
  84.  
  85.         }  
  86. }