《编程思维与实践》1045.单词表
题目
思路
分为两个步骤处理:
1.分割字符串:将所有单词存起来;
2.去重后按字典序.
去重有两种方法:
1.先按字典序排序,之后直接输出非重复的字符串即可;
2.桶排序——先将字符串去重存在一个桶里,再将桶里的非重复字符串排序输出.
注意的点:
单词与单词之间可能有着多个分隔字符.
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void* a,const void* b)
{
char *m=(char*)a;
char *n=(char*)b;
return strcmp(m,n);
}
int main()
{
int T;
scanf("%d\n",&T);
for(int t=0;t<T;t++)
{
char s[501]; //不超过500个字符
gets(s);
char str[100][27]; //分割字符串
int j=0;
for(int i=0;i<strlen(s);)
{
int k=0;
while(s[i]>='a'&&s[i]<='z') //非分隔字符
{
str[j][k++]=s[i++];
}
str[j++][k]='\0';
while(i<strlen(s)&&!(s[i]>='a'&&s[i]<='z'))
{
i++; //跳过分隔字符
}
}
qsort(str,j,sizeof(str[0]),cmp);
printf("case #%d:\n",t);
for(int i=0;i<j;i++)
{
if(i>0)
{
if(strcmp(str[i],str[i-1])) //后一个与前一个比较
{
printf("%s ",str[i]); //不同则输出
}
}
else{
printf("%s ",str[i]); //i=0时直接输出第一个
}
}
printf("\n");
}
return 0;
}