Why not just do it right:
Code:bool not_letter(char ch_p) { return !isalpha(ch_p); } char to_lower(char ch_p) { return tolower(ch_p); } std::string normalize(const std::string &str_p) { std::string s(str_p); std::remove_copy_if(s.begin(), s.end(), s.begin(), not_letter); std::transform(s.begin(), s.end(), s.begin(), to_lower); std::sort(s.begin(), s.end()); return s; } bool is_anagram_of(const std::string &a_p, const std::string &b_p) { return normalize(a_p) == normalize(b_p); }