📌  相关文章
📜  C 程序检查两个字符串是否互为 Anagram

📅  最后修改于: 2022-05-13 01:57:07.449000             🧑  作者: Mango

C 程序检查两个字符串是否互为 Anagram

编写一个函数来检查两个给定的字符串是否是彼此的字谜。一个字符串的变位词是另一个包含相同字符的字符串,只是字符的顺序可以不同。例如,“abcd”和“dabc”是彼此的字谜。

检查两个字符串是否是彼此的字谜

我们强烈建议您单击此处并进行练习,然后再继续使用解决方案。

方法(计数字符):
此方法假定两个字符串中可能的字符集都很小。在下面的实现中,假设字符使用 8 位存储,可能有 256 个字符。

  1. 为两个字符串创建大小为 256 的计数数组。将计数数组中的所有值初始化为 0。
  2. 遍历两个字符串的每个字符并增加相应计数数组中的字符计数。
  3. 比较计数数组。如果两个计数数组相同,则返回 true。

下面是上述思想的实现:

C
// C program to check if two strings
// are anagrams of each other
#include 
#define NO_OF_CHARS 256
  
/* Function to check whether two 
   strings are anagram of each other */
bool areAnagram(char* str1, char* str2)
{
    // Create 2 count arrays and initialize 
    // all values as 0
    int count1[NO_OF_CHARS] = {0};
    int count2[NO_OF_CHARS] = {0};
    int i;
  
    // For each character in input strings, 
    // increment count in the corresponding 
    // count array
    for (i = 0; str1[i] && str2[i]; i++) 
    {
        count1[str1[i]]++;
        count2[str2[i]]++;
    }
  
    // If both strings are of different length. 
    // Removing this condition will make the 
    // program fail for strings like "aaca" 
    // and "aca"
    if (str1[i] || str2[i])
        return false;
  
    // Compare count arrays
    for (i = 0; i < NO_OF_CHARS; i++)
        if (count1[i] != count2[i])
            return false;
  
    return true;
}
  
// Driver code
int main()
{
    char str1[] = "geeksforgeeks";
    char str2[] = "forgeeksgeeks";
    
    // Function Call
    if (areAnagram(str1, str2))
        printf(
        "The two strings are anagram of each other");
    else
        printf("The two strings are not anagram of each "
               "other");
    return 0;
}


输出:

The two strings are anagram of each other

有关详细信息,请参阅关于检查两个字符串是否是彼此的字谜的完整文章!