//*************************************************************************
// PROGRAM SPRAWDZA CZY PODANE WYRAZY SA ANAGRAMAMI
// - anagramy to wyrazy tej samej dlugosci i skladajace sie z tych samych liter
// - np. okno i noko, zez i ezz, piniki i iiipnk
// - wykorzystuje sortowanie bąbelkowe i funkcje swap
// - zlicza ile jest par anagramów w pliku
//*************************************************************************
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
string a; // zmienna na wczytany wyraz ze strumienia danych czyli z pliku
string b; // poniewaz interesuja mnie litery tego wyrazu to deklaruje ja jako string
int suma=0; // zmienna na ilosc anagramow w pliku
int c; // zmienna na dlugosc wyrazu a
int d; // zmienna na dlugosc wyrazu b
ifstream odczyt("dane_anagram.txt");
ofstream zapis("wynik_anagram.txt");
while(!odczyt.eof())
{
odczyt>>a; // czyta pierwszy wyraz z pliku
c=a.size(); // oblicza dlugosc wyrazu czyli ilosc liter
// teraz sortowanie liter w kazdym wyrazie w kolejnosci rosnacej, tak jak w alfabecie
// np. z wyrazu ara otrzymam aar
// zastosowalam sortowanie babelkowe
for (int i=0; i<c; i++)
{
for (int j=0; j<c-1; j++)
{
if (a[j]> a[j+1])
swap (a[j], a[j+1]); // zastosowalam funkcje swap,
// ktora zamienia miejscami elementy w tablicy
}
}
odczyt>>b;
d=b.size();
// to samo dla drugiego wyrazu
// czyli przez sortowanie babelkowe ustawiam litery w kolejnosci alfabetycznej
for (int i=0; i<d; i++)
{
for (int j=0; j<d-1; j++)
{
if (b[j]> b[j+1])
swap (b[j], b[j+1]);
}
}
if (a==b) //sprawdzam czy posortowany wyraz a jest taki sam jak posortowany wyraz b
{
suma=suma+1; // jesli sa rowne to sa anagramami i dlatego je zliczam
zapis<<a<<" "<<b<<endl; // oraz zapisuje je do pliku
}
}
zapis<<endl<<"Jest "<<suma<<" anagramow"; // zapisuje "ladnie" do pliku
odczyt.close();
zapis.close();
return 0;
}