#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_WORDS 128
#define MAX_LENGTH 16
// Function to sort characters in a string
void sortString(char *str) {
qsort(str, strlen(str), sizeof(char), (int (*)(const void *, const void *))strcmp);
}
// Function to check if two strings are anagrams
int areAnagrams(const char *str1, const char *str2) {
char sorted1[MAX_LENGTH], sorted2[MAX_LENGTH];
strcpy(sorted1, str1);
strcpy(sorted2, str2);
sortString(sorted1);
sortString(sorted2);
return strcmp(sorted1, sorted2) == 0;
}
// Function to group anagrams
void groupAnagrams(char words[][MAX_LENGTH], int n) {
int processed[MAX_WORDS] = {0}; // To track processed words
for (int i = 0; i < n; i++) {
if (processed[i]) continue; // Skip already grouped words
printf("%s ", words[i]);
processed[i] = 1;
for (int j = i + 1; j < n; j++) {
if (!processed[j] && areAnagrams(words[i], words[j])) {
printf("%s ", words[j]);
processed[j] = 1;
}
}
printf("\n");
}
}
int countWords(char words[][MAX_LENGTH]) {
int word_count = 0;
for (int i = 0; i < MAX_WORDS; i++) {
if (strlen(words[i]) > 0) { // Check if the string is not empty
word_count++;
} else {
break;
}
}
return word_count;
}
int main() {
char words[MAX_WORDS][MAX_LENGTH] = {"eat", "tea", "tan", "ate", "nat", "bat", "tae"};
groupAnagrams(words, countWords(words));
return 0;
}
/*
run:
eat tea ate tae
tan nat
bat
*/