《编程思维与实践》1045.单词表

《编程思维与实践》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; 
} 

猜你喜欢

转载自blog.csdn.net/boxueyuki/article/details/130495179