字母重排

原创 2018年04月15日 20:31:45
/*  输入一个字典,用*****结尾,输入若干单词,每个单词w,都需要在字典中找出所有可以用w的字母重排后得到的单词,
并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:( ,输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小
写字母组成,注意,字典中的单词不一定按字典排列)。
输入: tarp given score refund only trap work earn course pepper part 
*****
resco nfudre aptr sett oresuc 
输出:
score
refund 
part tarp trap
:(
course */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n;
char word[2000][10],sorted[2000][10];
//字符比较函数
int cmp_char(const void* _a,const void* _b)
/*const void* _a,这是定义了一个指针_a,_a可以指向任意类型的值,但它指向的值必须是常量。
在这种情况下,我们不能修改被指向的对象,但可以使指针指向其他对象。*/
{
	char* a=(char*)_a;
	char* b=(char*)_b;
	return *a-*b;
} 
//字符串比较函数
int cmp_string(const void* _a,const void* _b)
{
	char* a=(char*)_a;
	char* b=(char*)_b;
	return strcmp(a,b);
} 
int main(int argc, char *argv[]) {
	n=0;
	for(;;)
	{
		scanf("%s",word[n]);
		if(word[n][0]=='*')
			break;
		n++;
	}
	qsort(word,n,sizeof(word[0]),cmp_string);   //给所有单词排序 
	/*void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
      各参数:
    base -- 指向要排序的数组的第一个元素的指针。
    nitems -- 由 base 指向的数组中元素的个数。
    size -- 数组中每个元素的大小,以字节为单位。
    compar -- 用来比较两个元素的函数。
	*/
	for(int i=0;i<n;i++)
	{
		strcpy(sorted[i],word[i]);
		qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char); //给每个单词排序 
	}
	char s[10];
	while(scanf("%s",s)==1)
	{
		qsort(s,strlen(s),sizeof(char),cmp_char);   //给输入单词排序 
		int found=0;
		for(int i=0;i<n;i++)
		{
			if(strcmp(sorted[i],s)==0)
			{
				found=1;
				printf("%s\n",word[i]);    //输出原始单词,而不是排序后的 
			}
		}
		if(!found)
			printf(":(\n");
	}
	return 0;
}
编译环境:VC++6.0
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w819893168/article/details/79952831

//字母重排

//字母重排#include#include#include#includeusing namespace std;char word[2000][10],sorted[2000][10];//注意二...
  • u013077144
  • u013077144
  • 2016-04-21 18:50:42
  • 163

字母重排(算法竞赛入门经典)

输入一个字典,用*****结尾,输入若干单词用00000结尾。每个单词w,都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:( ,输入单词...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016-03-22 20:19:12
  • 765

上机练习题参考题

 附录1:上机练习题参考题1.   Programming BasicSicily 1830 SZ Fibonacci Sequence, 递归函数, 难度 0 Sicily 1795 Table ...
  • calvin_zcx
  • calvin_zcx
  • 2011-05-26 00:22:00
  • 1854

算法竞赛入门 5.3.2 字母重排

重点: 1.用vector保存字典单词; 2.
  • littlekenan
  • littlekenan
  • 2014-06-27 15:44:26
  • 414

一些单词

1 capacity [kə'pæsətɪ] [kəˈpæsɪti] n.容量;才能;性能;生产能力 adj.充其量的,最大限度的 2013-09-18 16:52:23 2 collecti...
  • AWNUXCVBN
  • AWNUXCVBN
  • 2013-09-22 20:26:43
  • 1035

UVA ~ 156 ~ Ananagrams(map+字符串处理)

题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。再判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有大写字...
  • ZscDst
  • ZscDst
  • 2017-12-28 21:54:11
  • 142

字母重排找单词

现输入一些字符串以**************结束输入 再输入一些单词将其随意排序如果与上输入与的字符串中的单词相同就输出该单词。 # include # include # include ...
  • u012785169
  • u012785169
  • 2014-12-03 20:01:10
  • 209

字母重排(字符串处理)

题目信息如下: 题意分析: 快速方法就是将字母先重排几次,然后在与输入的重拍后的数据进行比较,快速简单。 代码如下:(此解法详解析参考《算法竞赛入门》) #include #include ...
  • Ice_Alone
  • Ice_Alone
  • 2014-09-25 00:54:30
  • 1283

【5.3.2 字母重排】

输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单...
  • lavendermaple
  • lavendermaple
  • 2013-06-03 23:17:34
  • 499

字母重排分析

字母重排分析   (这个题目来自刘汝佳算法竞赛入门经典) 输入一个字典(用******结尾),然后再输入若干单词w,你 都需要在字典中找出所有的w的字母重排后得到的单词,并按照字典序冲销到...
  • aianjingdefuweng
  • aianjingdefuweng
  • 2011-09-29 21:56:18
  • 234
收藏助手
不良信息举报
您举报文章:字母重排
举报原因:
原因补充:

(最多只允许输入30个字)