#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <iomanip>	//precision miatt

using namespace std;

#define N 1000

string szavak[N];
int SZ, ot; //ot - az ötbetűs szavak száma

void kiir(int szam)
{
	cout << "--------------------" << endl;
	cout << szam << ". feladat" << endl;
	cout << "--------------------" << endl;
}

int maganhangzo(string szo)
{
	int db=0;
	char mh[5]={'a', 'e', 'i', 'o', 'u'};

	for(int i=0;i<szo.length();i++)
	{
		for(int j=0;j<5;j++)
		{
			if(szo[i]==mh[j])
			{
				db++;
			}
		}
	}

	return db;
}

void F1()
{
	string be;

	cout << "Kérek egy szót: ";
	cin >> be;
	int mennyi=maganhangzo(be);
	if(mennyi >0) cout << "Van benne magánhangzó." << " db: " << mennyi;
	else cout << "Nincs benne magánhangzó.";

	cout << endl;
}

void F2()
{
	ifstream be;
	be.open("szoveg.txt");

	string s;
	string max="";
	int i=0;
	while(!be.eof())
	{
		be >> s;
		if(s.length()>max.length()) max=s;
		i++;
	}
	SZ=i-1; //beolvasott szavak száma! 3. feladathoz jó lesz!
	cout << "A leghosszab szó: " << max << endl;
	be.close();
}

void F3()
{
	ifstream be;
	be.open("szoveg.txt");

	string s;
	string max="";
	int db=0;
	while(!be.eof())
	{
		be >> s;
		if(maganhangzo(s)>s.length()/2)
		{
			cout << s << " ";
			db++;
		}
	}
	cout << endl;
	be.close();

	cout << "Talált szavak száma: " << db << " db." << endl;
	cout << "Összes szavak száma: " << SZ << " db." << endl;

	cout << "Százalékban: " << db << "/" << SZ << " : ";
	cout.precision(4);
	cout << (float) db/SZ*100 << "%" << endl;
}

void F4()
{
	ifstream be;
	be.open("szoveg.txt");

	string s;
	ot=0;		   //Feltetelzhetjuk, hogy lesznek 5 betűs szavak

	for(int i=0;i<SZ;i++)
	{
		be >> s;
		if(s.length()==5)
		{
			szavak[ot]=s;
			ot++;
		}
	}
	be.close();

	string harom;
	cout << "Kérek egy 3 karakteres szórészletet: ";
	cin >> harom;

	for(int i=0;i<ot;i++)
	{
		if(szavak[i].substr(1,3)==harom)			//1,3 mert 0 1 ... a karakterek indexelése
		{
			cout << szavak[i] << " ";
		}
	}
	cout << endl;
}

void F5()
{
	//Rendezéssel is megoldható, de lehet más megoldás is
	//Próbáljuk meg a középső három karakter szerint rendezni a szavakat
	for(int i=0;i<ot-1;i++)
	{
		for(int j=i+1;j<ot;j++)
		{
			if(szavak[i].substr(1,3)>szavak[j].substr(1,3))
			{
				swap(szavak[i],szavak[j]);
			}
		}
	}
	ofstream ki;
	ki.open("letra.txt");

	//Most nézzük a rendezett tömb szavainak a közepét
	bool enter=false;
	for(int i=1;i<ot;i++)
	{
		if(szavak[i].substr(1,3)==szavak[i-1].substr(1,3))
		{
			ki << szavak[i-1] << endl;
			enter=true;
		}
		else
		{
			if(enter)
			{
				ki << szavak[i-1] << endl;
				ki << endl;
			}
			enter=false;
		}
	}
	ki.close();
}

int main()
{
	setlocale(LC_ALL, "hun");
	kiir(1);
	F1();
	kiir(2);
	F2();
	kiir(3);
	F3();
	kiir(4);
	F4();
	kiir(5);
	F5();
	return 0;
}
