- /*
- 本文件实现字符串排序,对多个字符串进行排序,
- 并且首先按首字母排序,
- 如果首字母相同,则比较第二个字母,以此类推
- */
- #include <stdio.h>
- //定义一个结构体,来保存首字母相同的字符串的地址
- typedef struct {
- char * CINIT1;
- char * CINIT2;
- }STRSTING;
- STRSTING exchange;
- char * TempCmp;
- void strcmp_str1_str2(char * str1,char * str2);
- void strsort(char *str[],int n);
- //函数从这里开始
- int main ()
- {
- char * str[]={"adf","abf","cdb","abfc","hfdfg","zadf"};
- strsort(str,6);
- }
- void strsort(char *str[],int n)
- {
- int i,j;
- char * temp;
- for (i=0;i<n-1;i++)
- {
- for (j=i+1;j<n;j++)
- {
- if (*str[i]>*str[j])
- {
- temp=str[i];
- str[i]=str[j];
- str[j]=temp;
- }else if (*str[i]==*str[j]) //如果首字母相等则进入,其他字母比较
- {
- exchange.CINIT1=str[i];
- exchange.CINIT2=str[j];
- strcmp_str1_str2(str[i],str[j]);
- str[i]=exchange.CINIT1;
- str[j]=exchange.CINIT2;
- }
- }
- }
- //打印测试
- for (i=0;i<n;i++)
- {
- printf("字符串%d:%s\n",i,str[i]);
- }
- }
- //本函数实现首字母相同的字符串,进行比对之后的字符串
- //功能说明:如果接下来的字符串1字母大于字符串2字母则交换地址返回,如果相等则继续下一个字母比较,如果小于则返回
- void strcmp_str1_str2(char * str1,char * str2)
- {
- if (*str1>*str2)
- {
- TempCmp=exchange.CINIT1;
- exchange.CINIT1=exchange.CINIT2;
- exchange.CINIT2=TempCmp;
- }else if (*str1==*str2)
- {
- if (*str1!='\0' || *str2!='\0')
- {
- str1++;
- str2++;
- strcmp_str1_str2(str1,str2);
- }
- }
- }