多字anagram checker

时间:2016-01-31 03:08:16

标签: c++ arrays

我获得了扩展我当前代码的任务(一个从用户的输入中获取两个单词并检查它们是否是字谜)。

代码接受用户的输入,然后一次一个字填充数组。如果数组最后匹配,则它们是anagram。

int check(char a[], char b[])
{
    int first[26] = { 0 }, second[26] = { 0 }, c = 0;

    while (a[c] != '\0')
    {
        first[a[c] - 'a']++;
        c++;
    }

    c = 0;

    while (b[c] != '\0')
    {
        second[b[c] - 'a']++;
        c++;
    }

    for (c = 0; c < 26; c++)
    {
        if (first[c] != second[c])
            return 0;
    }

    return 1;
}

我现在面临的困境是,我不知道怎么做&#34; 20个单词&#34;。

我们应该拿20个单词(例如&#34; art&#34;,&#34; tar&#34;,&#34; cat&#34;,&#34; fat&#34;, &#34; dat&#34;,&#34; ats&#34;)并将它们放入一个数组中。然后我们采用另一个数组,使其成为唯一单词的数量,即同类词中的第一个。

示例:&#34; art&#34;和&#34; cat&#34;是唯一的,但如果你包括&#34; tar&#34;,那么&#34; tar&#34;不是唯一的。

它将计算单词的字组数量,然后显示字组中的所有单词。

要做到这一点,我怀疑我之前的代码将不得不改变一大堆,我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

您可以从频率数组中重新生成一个单词,这个单词将是唯一的。
这些可以按字母顺序排序。例如: -
焦油:艺术 老鼠:艺术

或者你可以用频率编码频率: -
焦油:1a1r1t(1&#39; a&#39;,1&#39; r&#39;和&#39; t&#39;)
苹果:1a1e1l2p

现在您可以将这些生成的单词放在一个数组中并检查重复项,或者您可以使用一组来获取唯一计数。