19 变位词

本文介绍了变位词的概念,即字母组成相同但顺序不同的单词。提供了两种编程题目:一是编写函数判断两个字符串是否为变位词,二是用C语言编写程序找出文本中指定单词的变位词并按升序输出。题目对输入限制做了详细说明,如单词长度、文件格式和变位词处理等。
摘要由CSDN通过智能技术生成

所谓变位词是指把某个单词的字母的位置(顺序)加以改换所形成的一个新词,即两个单词中出现的字母相同,并且每个字母出现的次数也相同。例如:silent 是 listen 的一个变位词,integral 是 triangle 的一个变位词。

题目 1

在英语中,如果两个单词中出现的字母相同,并且每个字母出现的次数也相同,那么这两个单词互为变位词。请完成一个函数,判断输入的两个字符串是不是互为变位词。
思路:

一个数组保存字符出现的次数。我们可以开一个大小是 256 的整数数组,遍历第一个字符串,将相应的字符出现的次数加1;遍历第二个字符串时,将相应出现的次数减 1。最后如果数组中 256 个数都是 0,说明两个字符串是一对变位词。(第一个字符串出现的字符都被第二个字符串出现的字符抵消了)。如果有一个不为0则不是变位词。

#include <stdio.h>
#include <stdlib.h>

int is_anagram(char *a, char *b)
{
	if(a==NULL || b==NULL)
		return 0;
	if(strlen(a)!=strlen(b))//如果长度不等,则不为变位词
		return 0;
	char hash_table[256] = {0};//创建简单哈希数组,下标为字符的ASCII码,数组值是字符出现的次数
	char *p = a;
	while(*p != '\0')
	/** 
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值