Witam. Mam do napisania program wypisujący ananagramy z podanego zboru słów. Ananagram to wyraz, w którym nie da się tak zmienić kolejności liter aby uzyskać nowe słowo. Takie przeciwienstwo do anagramu. Program nie moze potrafic okreslic czy przestawione litery tworza poprawne slowo dlatego na wejsciu podajemu slownik (czyli wspomniany zbior wyrazow).
Przykladowo jak na wejsciu podamy zbior slow:
abc, cba, def, gHi, hGi
to program na wyjsciu ma wyswietlic slowo:
def
gdyż jest to ananagram w tym zbiorze, a pary abc i cba oraz gHi i hGi sa anagramami.
Wielkosc liter nie ma znaczenia!
Napisalem program wczytujacy zbior wyrazow do tablicy. Tworze kopie tej tablicy.
Wszystkie litery w wyrazach wejsciowych zamieniam na wielkie i sortuje je.
Tylko teraz nie wiem jak przeszukac te zbiory i znalezc ananagramy. Myslalem o uzyciu stlowej funkcji nex_permutation ale nie wiem czy to dobry sposob.
#include <iostream>
#include <string>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main()
{
string wejscie[1000];
string wynik[1000];
string kopia[1000];
int i=0;
cin >> wejscie[i];
kopia[i]=wejscie[i];
//zadawanie wyrazow
while (wejscie[i][0] != '#')
{
i++;
cin >> wejscie[i];
kopia[i]=wejscie[i];
}
//sortowanie liter w kazdym wyrazie
for (int j=0; j<i; j++)
{
sort(wejscie[j].begin(), wejscie[j].end());
}
//zamiana wszystkich liter na duze w wyrazach wejsciowych
for (int x=0; x<i; x++)
{
transform(wejscie[x].begin(), wejscie[x].end(), wejscie[x].begin(), ::toupper);
}
cout << endl;
//wypisanie wszystkich wyrazow skopiowanych
for(int j=0; j<i; j++)
{
cout << kopia[j]<< endl;
}
cout << endl;
//wypisanie wszystkich wyrazow wejsciowych po zmianie wielkosci liter
for(int j=0; j<i; j++)
{
cout << wejscie[j]<< endl;
}
return 0;
}