题目描述
输入一定量的单词(#结束),按字母顺序排序后输出,若有重复则只保留一个。
输入
暂无
输出
暂无
样例输入
hello
I
how
fine
free
if
free
final
full
all
aware
#
样例输出
all
aware
final
fine
free
full
hello
how
I
if
参考代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dzx(char a)
{
if(a>='A'&&a<='Z')
a=a+32;
return a;
}
int strbj(char a[],char b[])
{
int mlen,i;
if(strlen(a)>strlen(b)) mlen=strlen(b); else mlen=strlen(a);
for (i=0;i<mlen;i++)
{
if(dzx(a[i])!=dzx(b[i]))break;
}
if(i!=mlen)
{
if(dzx(a[i])>dzx(b[i])) return 1; else if(dzx(a[i])<dzx(b[i])) return -1;
} else
{
if(strlen(a)==strlen(b)) return 0; else if(mlen==strlen(a)) return -1; else return 1;
}
return 0;
}
int main()
{
char **a,*p,i=0,j,k;
p=(char*)malloc(20*10*sizeof(char));
a=(char**)malloc(20*sizeof(char *));
char b[10];
char *temp=b;
for (k=0; k<20; k++)
a[k]=p+k*10;
while(scanf("%s",a[i])!=EOF)
{
if(a[i][0]=='#') break;
i=i+1;
}
for (k=0;k<i-1;k=k+1)
for (j=0;j<i-1;j=j+1)
{
if(strbj(a[j],a[j+1])>0)
{
strcpy(temp,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],temp);
}
}
printf("%sn",a[0]);
for (j=1; j<i-1; j=j+1)
{
if(strbj(a[j],a[j-1])!=0)
printf("%sn",a[j]);
}
printf("%sn",a[i-1]);
free(p);
free(a);
return 0;
}
解析
暂无