#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>

using namespace std;

string sz[300];
string r[300];
int N;

string szorendezo(string a)
{
	for(int i=0;i<a.length()-1;i++)
		for(int j=i+1;j<a.length();j++)
		{
			if(a[i]>a[j]) swap(a[i],a[j]);
		}
	return a;
}

void F1()
{
	string be;

	cout << "Szöveg:";
	cin >> be;

	if(be.length()>0)
	{
		//rendezés
		be=szorendezo(be);
		cout << "Rendezve: " << be << endl;

		//számolás
		int db=1;
		for(int i=1;i<be.length();i++)
		{
			if(be[i]!=be[i-1]) db++;
		}
		cout << "A különböző karakterek száma: " << db << endl;
	}
	else
	{
		cout << "Üres szöveg: " << 0 << " db karakter" << endl;
	}
}

void F2()
{
	ifstream be;
	be.open("szotar.txt");

	int i=0;
	while(!be.eof())
	{
		be >> sz[i];
		i++;
	}
	//szavak száma
	N=i;
	be.close();
}

void F3()
{
	ofstream ki;
	ki.open("abc.txt");

	for(int i=0;i<N;i++)
	{
		r[i]=szorendezo(sz[i]);
		ki << r[i] << endl;
		cout << r[i] << endl;
	}
	ki.close();
}

void F4()
{
	string a, b;

	cout << "Kérek 2 szót!" << endl;
	cout << "1. szó: ";
	cin >> a;
	cout << "2. szó: ";
	cin >> b;

	if(szorendezo(a)==szorendezo(b))
	{
		cout << "Anagramma" << endl;
	}
	else
	{
		cout << "Nem anagramma" << endl;
	}
}

void F5()
{
	string t;

	cout << "Kérek egy szót: ";
	cin >> t;
	t=szorendezo(t);

	int db=0;
	cout << "Találatok:" << endl;
	for(int i=0;i<N;i++)
	{
		if(t==r[i])
		{
			cout << sz[i] << endl;
			db++;
		}
	}
	if(db==0) cout << "Nincs a szótárban anagramma" << endl;
}

void F6()
{
	//r és sz tömb rendezése szavak hossza szerint csökkenőbe,
	//azonos szóhosszúság esetén ABC rend szerint rendezünk
	for(int i=0;i<N-1;i++)
		for(int j=i+1;j<N;j++)
		{
			if(r[i].length()<r[j].length()||(r[i].length()==r[j].length()&&r[i]<=r[j]))
			{
				swap(r[i],r[j]);
				swap(sz[i],sz[j]);
			}
		}

	int s=0;
	while(r[s].length()==r[0].length()){
		cout << r[s] << " eredeti: " << sz[s] << endl;
		s++;
	}
}

void F7(){

	//Hosszúság szerint növekvően, azon belül ABC rendbe rendezzük az r tömböt,
	//és vele párhuzamosan az sz tömböt is átrendezzük. Hasonlóan a 6. feladathoz.
	for(int i=0;i<N-1;i++)
		for(int j=i+1;j<N;j++)
		{
			if(r[i].length()>r[j].length()||(r[i].length()==r[j].length()&&r[i]>=r[j]))
			{
				swap(r[i],r[j]);
				swap(sz[i],sz[j]);
			}
		}

	ofstream ki;
	ki.open("rendezve.txt");
	for(int i=0;i<N;i++){
		if(sz[i].length()==sz[i+1].length() && i<N-1){
			//anagrammák egymás mellé kerülnek
			if(r[i] == r[i+1]){
				ki << sz[i] << " ";
			}else{
				ki << sz[i] << endl;
			}
		}else{
			if(i==N-1){
				ki << sz[i];
			}else{
				ki << sz[i] << endl << endl;
			}
		}
	}
	ki.close();
}

int main()
{
	setlocale(LC_ALL, "hun");
	F1();
	F2();
	F3();
	F4();
	F5();
	F6();
	F7();
	return 0;
}
