已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印。
本例的输出顺序为:
dear, dog, eye, bed。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
int compare(char*str1,char*str2,int*hash);
void print(char**p,int i);
int i,j,count=0;
char *h="dgecfboa";
int hash[256];
char *temp;
char *s[4]={"bed","dog","dear","eye"};//也可以用char s[][5]={"bed","dog","dear","eye"};
while(*h!='\0')
{
hash[*h]=count++;
++h;
}
for(i=0;i<3;i++)
{
for(j=i+1;j<4;j++)
if(compare(s[i],s[j],hash)==-1)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
print(s,4);
}
int compare(char*str1,char*str2,int*hash)
{
int m=strlen(str1),i=0;
int n=strlen(str2),j=0;
while(i<m&&j<n)
{
printf("%c-----%c\n",*(str1+i),*(str2+j)); //在这用*str1+i,*str2+j;不是预期结果(也非str1所指行第一个字符加i)
if(hash[*(str1+i)]<hash[*(str2+j)])
return 0;
else if(hash[*(str1+i)]>hash[*(str2+j)])
return -1;
else
{
++i,++j;
}
}
if(i<m&&j==n)
return 0;
if(i==m&&j<n)
return -1;
if(m==n)
return 0;
}
void print(char**p,int k)
{
int i;
for(i=0;i<k;i++)
printf("%s ",*(p+i));
printf("\n");
}