经典例题之单词排序(字典序)

10:单词排序

描述

输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)

输入

一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符

输出

按字典序输出这些单词,重复的单词只输出一次。

样例输入
She  wants  to go to Peking University to study  Chinese
样例输出
Chinese
Peking
She
University
go
study
to
wants
C语言代码
#include<stdio.h> 
#include<string.h>

void sort(char (*p)[51],int wordnum);

int main()
{
	char printf_string[5000],word[100][51],c,j,k,wordnum;
	wordnum=0; j=0;
	while(1)
	{
		c=getchar();
		if(c != ' ' && c != '\n')  //k=1,单词找到了 
		{
			k=1;
			word[wordnum][j++]=c;
		}	
		else if(c == ' ' && k == 1)  //单词找到后的空格,表示一个单词找完了。 
		{
			word[wordnum][j]='\0'; k=0; j=0; wordnum++; 

		}		
		else if(c == '\n' && k == 1)  //这个情况针对输入最后一个单词后换行 
		{
			word[wordnum][j]='\0'; wordnum++; break;	//这个情况针对输入最后一个单词后是空格后换行 
		}	
		else if(c == '\n')	break;
	}

	sort(word,wordnum);   //传递指向一维数组的指针和单词数 
	
	for(j=0;j < wordnum;++j)
	{                   //注意传递的指针是指向一维数组首元素的地址。 
		if( j != 0 && (strcmp(*(word+j),*(word+j-1)) != 0) )	printf("\n%s",word+j);
		else if(j == 0) printf("%s",word+j);
	}
	
	
}

void sort(char (*p)[51],int wordnum)
{
	int i,j;
	char string[51];
	for(i=0;i < wordnum;++i)
		for(j=0;j < wordnum;++j)
			if(strcmp(*(p+i),*(p+j)) < 0)  //字典序排序的问题可以选择strcmp函数进行对比关系,	
			{
				strcpy(string,*(p+i));
				strcpy(*(p+i),*(p+j));  //注意传递的指针是指向一维数组首元素的地址。 
				strcpy(*(p+j),string);
			}				
}

收获
  • 1.对于英文字典序的用strcmp函数比较好
  • 2.注意strcmp函数传递的指针是指向一维数组首元素的地址,当传递实参时,对应的基类型应相同。对于指向行的指针,要转化为指向列的指针才能传递!
  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值