An anagram is a word or phrase that you can make from another word or phrase by putting the letters in a different order. For example “mean” is an anagram of “name.”
#include <iostream>
#include <string>
#include <list>
using namespace std;
bool is_anagram(char *str1, char *str2)
{
int flag1[256];
int flag2[256];
int i;
for(i= 0; i < 256; i++){
flag1[i] = 0;
flag2[i] = 0;
}
while(*str1 != '\0'){
flag1[*str1++] ++;
}
while(*str2 != '\0'){
flag2[*str2++] ++;
}
for(i = 0; i < 256; i ++){
if(flag1[i] != flag2[i]){
return false;
}
}
return true;
}
bool is_anagram2(string str1, string str2)
{
list<char> l1;
list<char> l2;
int i;
if(str1.length() != str2.length())
return false;
for(i = 0; i < str1.length(); i++){
l1.insert(l1.begin(),str1.at(i));
}
for(i = 0; i < str2.length(); i++){
l2.insert(l2.end(),str2.at(i));
}
l1.sort();
l2.sort();
return (l1 == l2)? true : false;
}
int main(int argc, char* argv[])
{
string str1 = "aaaab bc";
string str2 = "abaaa ca";
if(is_anagram2(str1, str2) == true)
cout << str1 << " and " << str2 << " are anagrams!" << endl;
else
cout << str1 << " and " << str2 << " are NOT anagrams!" << endl;
char *str3 = "abcde";
char *str4 = "cdbea";
if(is_anagram(str3, str4) == true)
cout << str3 << " and " << str4 << " are anagrams!" << endl;
else
cout << str3 << " and " << str4 << " are NOT anagrams!" << endl;
return 0;
}
Output
aaaab bc and abaaa ca are NOT anagrams!
abcde and cdbea are anagrams!