Anagram in C
×


Anagram in C

29

Anagrams, where the letters of one word can be rearranged to form another word, present an intriguing problem in programming.

 Anagrams are intriguing linguistic phenomena where the letters of one word or phrase can be rearranged to form another word or phrase, using all the original letters exactly once.

This concept has fascinated word enthusiasts and puzzle solvers for centuries.

Anagrams are not just entertaining; they also serve as tools for language exploration, memory enhancement, and problem-solving.

Examples:

I love cats. (Anagram: Cats love I.)

The sun is shining. (Anagram: Shining is the sun.)

She likes ice cream. (Anagram: Ice cream she likes.)


Algorithm for Anagrams in C:

Remove Spaces and Punctuation: Eliminate any non-alphabetic characters and spaces from both stings to ensure an accurate comparison.

Convert to Lowercase: Standardize the case by converting both stings to lowercase, allowing for case-insensitive comparisons.

Sort Characters: Sort the characters of both strings alphabetically, facilitating easy comparison.

Compare Strings: After sorting, compare the two stings. If they match, they are anagrams; otherwise, they are not.

Examples:

// Program for Anagrams in C
#include<stdio.h> 
#include<string.h> 
#include<stdbool.h> 

// Function to check if a character is a vowel
bool isVowel(char ch) {
    ch = tolower(ch);
    return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u');
}

// Function to count vowels and consonants in a sentence
void countVowelsAndConsonants(char *sentence, int *vowels, int *consonants) {
    *vowels = 0;
    *consonants = 0;

    bool wordBoundary = true;

    for (int i = 0; sentence[i] != '\0'; i++) {
        char ch = tolower(sentence[i]);

        // Check if the character is an alphabet
        if (isalpha(ch)) {
            if (isVowel(ch)) {
                (*vowels)++;
            } else {
                (*consonants)++;
            }

            // If a word boundary is encountered, reset wordBoundary flag
            if (isspace(sentence[i + 1]) || sentence[i + 1] == '\0') {
                wordBoundary = true;
            }
        } else {
            // If a punctuation mark or space is encountered, set wordBoundary flag
            wordBoundary = true;
        }
    }
}

int main() {
    char sentence[1000];
    int vowels, consonants;

    // Input sentence
    printf("Enter a sentence: ");
    fgets(sentence, sizeof(sentence), stdin);

    // Count vowels and consonants
    countVowelsAndConsonants(sentence, &vowels, &consonants);

    // Output results
    printf("Number of vowels: %d\n", vowels);
    printf("Number of consonants: %d\n", consonants);

    return 0;
}
		
	

Output:

Enter a sentence: The sky is blue
Number of vowels: 4
Number of consonants: 8

This program counts the number of vowels and consonants in a sentence while considering each word as a separate entity.

It utilizes a flag word boundary to identify the end of each word, ensuring accurate counting even with punctuation marks between words.

Here are two C programs: one to check if two strings are anagrams of each other, and another to generate all possible anagrams of a given string.

Check if Two Strings are Anagrams:

#include<stdio.h> 
#include<string.h> 
#include<stdbool.h> 

// Function to check if two strings are anagrams
bool areAnagrams(char *str1, char *str2) {
    int count[256] = {0}; // Assuming ASCII characters

    // Calculate frequency of characters in str1
    for (int i = 0; str1[i] != '\0'; i++) {
        count[(int)str1[i]]++;
    }

    // Subtract frequency of characters in str2
    for (int i = 0; str2[i] != '\0'; i++) {
        count[(int)str2[i]]--;
    }

    // If both strings are anagrams, count array will be all zeros
    for (int i = 0; i < 257; i++) {
        if (count[i] != 0) {
            return false;
        }
    }
    return true;
}

int main() {
    char str1[100], str2[100];

    printf("Enter first string: ");
    scanf("%s", str1);

    printf("Enter second string: ");
    scanf("%s", str2);

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

    return 0;
}
		
	

Output:

Enter first string: end
Enter second string: ned
The strings are anagrams.

 Generate Anagrams of a String:

#include<stdio.h> 
#include<string.h> 

// Function to swap characters at positions i and j
void swap(char *x, char *y) {
    char temp = *x;
    *x = *y;
    *y = temp;
}

// Function to generate all permutations of a string
void generateAnagrams(char *str, int start, int end) {
    if (start == end) {
        printf("%s\n", str);
    } else {
        for (int i = start; i <= end; i++) {
            swap((str + start), (str + i));
            generateAnagrams(str, start + 1, end);
            swap((str + start), (str + i));
        }
    }
}

int main() {
    char str[100];

    printf("Enter a string: ");
    scanf("%s", str);

    printf("Anagrams of %s are:\n", str);
    generateAnagrams(str, 0, strlen(str) - 1);

    return 0;
}
	

Output:

Enter a string: int
Anagrams of int are:
int
itn
nit
nti
tni
tin


Best WordPress Hosting


Share:


Discount Coupons

Get a .COM for just $6.98

Secure Domain for a Mini Price



Leave a Reply


Comments
    Waiting for your comments