#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

string szavak5[1000];                       ///ötkarakteres szavakat ide gyüjtjük
bool vanmaganhangzo(string szo);
unsigned int maganhangzokszama(string szo); ///unsigned csak a figyelmeztetés miatt


int main()
{
    setlocale(LC_ALL, "hun");
    ///1. feladat
    cout << "1. feladat: Adjon meg egy szót: ";
    string szo;
    cin >> szo;
    if(vanmaganhangzo(szo)) cout << "Van benne magánhangzó." << endl;
    else cout << "Nincs benne magánhangzó." << endl;

    ///2. feladat
    cout << "2. feladat: A leghosszab szó: ";
    ifstream be;
    be.open("szoveg.txt");
    if(be.fail()) {

        cout << "A fájl nem nyitható meg.";
        cin.get();
        exit(-1);
    }
    int i=0;
    getline(be,szo);
    string leghosszabbSzo=szo;
    while(!be.eof()){
        getline(be,szo);
        if(leghosszabbSzo.length()<szo.length()) leghosszabbSzo=szo;
        i++;
    }
    be.close();
    cout << leghosszabbSzo << ", a karakterek száma: " << leghosszabbSzo.length() << endl;

    ///3. feladat
    cout << "3. feladat: Azok a szavak, amelyekben több a magánhangzó: ";
    ifstream be2;
    be2.open("szoveg.txt");
    if(be2.fail()) {

        cout << "A fájl nem nyitható meg.";
        cin.get();
        exit(-1);
    }
    double j=0;
    double db=0;
    while(!be2.eof()){
        getline(be2,szo);
        if(maganhangzokszama(szo)*2>szo.length()) {
            cout << szo << " ";
            db++;
        }
        if(szo!="") j++; ///az állomány utolsó sora miatt
    }
    be2.close();
    cout << "A talált szavak száma: " << db << endl;
    cout << "Összes szó: " << j << endl;
    printf("%s%.2f%s","A talált szavak a(z) ",db/j*100,"%-át teszik ki az összes szónak.\n");

    ///4. feladat
    cout << "4. feladat: Adjon meg egy háromkarakteres szórészletet: ";
    string szoreszlet;
    cin >> szoreszlet;
    ifstream be3;
    be3.open("szoveg.txt");
    if(be3.fail()) {

        cout << "A fájl nem nyitható meg.";
        cin.get();
        exit(-1);
    }
    i=0;
    int k=0;
    int db5=0;
    while(!be3.eof()){
        getline(be3,szo);
        if(szo.length()==5) {
            szavak5[k]=szo;
            k++;
        }
        i++; ///az állomány utolsó sora miatt
    }
    db5=k;
    be3.close();

    for(k=0; k<db5; k++) {
        if(szavak5[k][1]==szoreszlet[0] && szavak5[k][2]==szoreszlet[1] && szavak5[k][3]==szoreszlet[2]) cout << szavak5[k] << " ";
    }
    cout << endl;
    ///5. feladat
    cout << "5. feladat: létraszavak csoportosítása fájlba." << endl;
    ///sorbarendezzük a 2., 3. majd 4. karakter szerint, így egymás alá kerülnek az azonosak.
    for(int i=0; i<db5-1; i++) {

        for(int j=i+1; j<db5; j++){
            if(szavak5[i][1]>szavak5[j][1]){
                string csere=szavak5[j];
                szavak5[j]=szavak5[i];
                szavak5[i]=csere;

            }
            if(szavak5[i][2]>szavak5[j][2]){
                string csere=szavak5[j];
                szavak5[j]=szavak5[i];
                szavak5[i]=csere;

            }
            if(szavak5[i][3]>szavak5[j][3]){
                string csere=szavak5[j];
                szavak5[j]=szavak5[i];
                szavak5[i]=csere;

            }

        }

    }

    ofstream ki;
    ki.open("letra.txt");
    if(ki.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }

    int szamlalo=1;
    for(int i=0; i<db5; i++) {
        ///kiirjuk azokat, amelyek belseje egyezik. pl. 4 közül az első hármat.
        if(szavak5[i][1]==szavak5[i+1][1] && szavak5[i][2]==szavak5[i+1][2] && szavak5[i][3]==szavak5[i+1][3]){
            ki << szavak5[i] << endl;
            szamlalo++;
        }
        ///majd a negyediket
        if(szamlalo>1 && (szavak5[i][1]!=szavak5[i+1][1] || szavak5[i][2]!=szavak5[i+1][2] || szavak5[i][3]!=szavak5[i+1][3])) {
            ki << szavak5[i] << endl;
            szamlalo=1;
            ki  << endl; ///minden csoport új sorban
        }
    }
    ki.close();
    cout << "A fájlba kiírás sikerült." << endl;
    cin.get();
    return 0;
}

bool vanmaganhangzo(string szo){
    bool van=false;
    unsigned int i=0;
    char maganhangzo[]={'a','e','i','o','u'};
    while(!van && i<szo.length()){
        for(int j=0; j<6; j++){
            if(szo[i]==maganhangzo[j]) van=true;
        }
        i++;
    }
    return van;
}

unsigned int maganhangzokszama(string szo){
    int db=0;
    for(unsigned int i=0; i<szo.length(); i++){
        if(szo[i]=='a' || szo[i]=='e' || szo[i]=='i' || szo[i]=='o' || szo[i]=='u') db++;
    }
    return db;
}
