如何检查c中的两个单词是否为字谜

时间:2015-03-03 23:06:13

标签: c anagram

我正在尝试创建一个程序,它能够确定两个输入的单词是否是彼此的字谜。

我的导师告诉我的方式是计算一个单词的第一个字母的数量,然后与另一个单词进行比较,然后重复其余的字母。因此,如果这个词到了最后,那么它就会认为它们是字谜。然而,这就是他帮助我的所有事情,我真的在努力解决这个问题。

该程序需要打印它们是否是这样的字谜,

Success! "Carthorse" and "Orchestra" are anagrams!

编辑:感谢大家的所有回复,虽然我理解他们背后的整个想法,我发现将它们放入代码非常困难,是否有人能够简单地为我编写带注释的代码?它不是作业或其他任何东西,它只是一个个人项目。

3 个答案:

答案 0 :(得分:1)

听起来你是C的新手!欢迎:))

这样的任务看起来很复杂,所以我在这里做的第一步就是把它分解为你可以google如何做的步骤。所以:

"计算一个单词的第一个字母的数量,然后与另一个单词进行比较,然后重复其余的字母"

  1. 读入/创建变量
  2. 创建一个长度为26的数组,用于存储字母表中的每个字母
  3. 循环显示第一个单词并为每个字母添加一个到正确的数组索引(a = 0,m = 12等) e.g。

    int index = string [i] - ' a&#39 ;; //这将从字母中减去ascii值,得到a = 0等 letterCounts [指数] ++; //或letterCounts [index] - ;

  4. 循环显示第二个单词,并为每个字母从数组索引中减去一个

  5. 如果最后任何索引不是0,那么它不是anagram。

答案 1 :(得分:0)

将两个字符串转换为小写字符。

为字母表中的字母创建两个包含26个字符的数组。

遍历每个字符串,计算字母数,并递增字母数组中的相应元素。

然后比较两个字母数组,如果每个字符相等,那么你的字符串就是字谜。

答案 2 :(得分:0)

1)根据需要将两个字符串转换为小写(使用tolower中的ctype.h)。

2)对每个字符串进行排序,例如,使用qsort中的stdlib.h

static int cmp(const void *a, const void *b) { return *(char *)a - *(char *)b; }

qsort(str1, strlen(str1), 1, (cmp));
qsort(str2, strlen(str2), 1, (cmp));

3)将排序后的字符串与strcmp中的string.h进行比较 - 如果相等,则为字谜,否则为。