Anagram jest to, najczęściej, wyraz powstały w wyniku przestawień liter w innym wyrazie.
Zauważyć należy, że każde słowo to tak naprawdę zbór znaków. Jeżeli mamy słowo i jego anagram to składają się one z tych samych liter. Sortując litery (w kolejności rosnącej lub malejącej) w tych wyrazach utworzymy identyczne ciągi. Tak przetworzone ciągi należy porównać by dowiedzieć się czy jedno słowo jest anagramem drugiego (i odwrotnie).
Wykorzystując funkcję sort
Wykorzystując sortowanie bąbelkowe
Zauważyć należy, że każde słowo to tak naprawdę zbór znaków. Jeżeli mamy słowo i jego anagram to składają się one z tych samych liter. Sortując litery (w kolejności rosnącej lub malejącej) w tych wyrazach utworzymy identyczne ciągi. Tak przetworzone ciągi należy porównać by dowiedzieć się czy jedno słowo jest anagramem drugiego (i odwrotnie).
Wykorzystując funkcję sort
#include <iostream> #include <algorithm> using namespace std; int main() { string sSlowo1, sSlowo2; while(cin >> sSlowo1 >> sSlowo2){ sort(sSlowo1.begin(),sSlowo1.end()); sort(sSlowo2.begin(),sSlowo2.end()); if (sSlowo1 == sSlowo2) cout << "Tak" << endl; else cout << "Nie" << endl; } return 0; }
Wykorzystując sortowanie bąbelkowe
#include <iostream> #include <algorithm> using namespace std; string sort(string s){ int l = s.size(); for(int i = 0; i < l; i++){ for(int j = 0; j < l - i - 1; j++){ if(s[j]>s[j+1]) swap(s[j],s[j+1]); } } return s; } int main() { string sSlowo1, sSlowo2; while(cin >> sSlowo1 >> sSlowo2){ sSlowo1 = sort(sSlowo1); sSlowo2 = sort(sSlowo2); if (sSlowo1 == sSlowo2) cout << "Tak" << endl; else cout << "Nie" << endl; } return 0; }