How to check if two strings are anagram (same letters different words) in C

2 Answers

0 votes
#include <stdio.h>
  
#define ASCII_RANGE 256

int areAnagrams(char s1[], char s2[]) {
    int abc_s1[ASCII_RANGE] = { 0 }, abc_s2[ASCII_RANGE] = { 0 }, i = 0;
   
    while (s1[i] != '\0') {
        abc_s1[s1[i] - 'a']++;
        i++;
    }
       
    i = 0;
   
    while (s2[i] != '\0') {
        abc_s2[s2[i]-'a']++;
        i++;
    }
   
    for (i = 0; i < ASCII_RANGE; i++) {
        if (abc_s1[i] != abc_s2[i]) {
            return 0;
        }
    }
   
    return 1;
}
  
int main() 
{ 
    char s1[32] = "stdoi", s2[32] = "iostd";
   
    if (areAnagrams(s1, s2))
        printf("Anagram\n");
    else
        printf("Not anagram\n");
       
    return 0;
}
  
  
    
/*
run:
  
Anagram
  
*/

 



answered Jan 27, 2019 by avibootz
edited Nov 12, 2025 by avibootz
0 votes
#include <stdio.h>
#include <string.h>
#include <ctype.h> // tolower

#define ASCII_RANGE 256

// Function to check if two strings are anagrams
int areAnagrams(const char *str1, const char *str2) {
    int frequency_array[ASCII_RANGE] = {0}; 

    // If lengths differ, they can't be anagrams
    if (strlen(str1) != strlen(str2)) {
        return 0;
    }

    // Count frequency of each character in str1
    for (int i = 0; str1[i] != '\0'; i++) {
        unsigned char ch = (unsigned char)tolower(str1[i]);
        frequency_array[ch]++;
    }

    // Subtract frequency based on str2
    for (int i = 0; str2[i] != '\0'; i++) {
        unsigned char ch = (unsigned char)tolower(str2[i]);
        frequency_array[ch]--;
        if (frequency_array[ch] < 0) {
            return 0; 
        }
    }

    return 1; // Anagram
}

int main() {
    char str1[32] = "stdoi", str2[32] = "iostd";

    if (areAnagrams(str1, str2)) {
        printf("The strings are anagrams.\n");
    } else {
        printf("The strings are NOT anagrams.\n");
    }

    return 0;
}


/*
run:

The strings are anagrams.

*/

 



answered Nov 12, 2025 by avibootz
...