﻿#include <iostream>
#include <cstdlib>
#include <fstream>
#include <sstream>

using namespace std;

string szavak[300];
int szavakDb;
string sorbarendezes(string szoveg);

int main()
{
    setlocale(LC_ALL, "hun");
    ///1. feladat
    cout << "1. feladat: Adjon meg egy szöveget: " << endl;
    string szoveg;
    //cin >> szoveg;
    getline(cin,szoveg);

    szoveg=sorbarendezes(szoveg);
    ///cout << szoveg << endl; //csak teszt

    cout << "különbözõ karakterek száma: ";
    int db=0;

    char karakterek[szoveg.length()];
    int k=0;
    for(unsigned int i=0; i<szoveg.length(); i++) {
        if(szoveg[i]!=szoveg[i+1]) {
            db++;
            karakterek[k]=szoveg[i];
            k++;
        }

    }

    cout << "karakterek száma: " << db << " ";
    for(k=0; k<db; k++) {
        cout << karakterek[k] << " ";
    }
    cout << endl;
    ///2. feladat
    cout << "2. feladat: beolvasás " << endl;
    ifstream be;
    be.open("szotar.txt");
    if(be.fail()){
        cout << "A fájl olvasása sikertelen";
        cin.get();
        exit(-1);
    }
    int i=0;
    while(!be.eof()){
        be >> szavak[i];
        i++;
    }
    szavakDb=i;
    be.close();

    ///3. feladat
    cout << "3. feladat: fájlbaírás" << endl;
    ofstream ki;
    ki.open("abc.txt");
    if(ki.fail()){
        cout << "A fájl olvasása sikertelen";
        cin.get();
        exit(-1);
    }
    for(int i=0; i<szavakDb; i++) {
        ki << sorbarendezes(szavak[i]) << endl;
    }
    ki.close();
    cout << "A fájlba írás sikerült." << endl;
    ///4. feladat
    cout << "4. feladat: Adjon meg két szót: ";
    string szo1, szo2;
    cin >> szo1 >> szo2;
    if(sorbarendezes(szo1)==sorbarendezes(szo2)) cout << "Anagramma." << endl;
        else cout << "Nem anagramma." << endl;

    ///5. feladat
    cout << "5. feladat: Adjon meg egy szót: ";
    cin >> szo1;
    bool van=false;
    for(int i=0; i<szavakDb; i++) {
        if(sorbarendezes(szo1)==sorbarendezes(szavak[i]) && szo1!=szavak[i]) {
           cout << szavak[i] << endl;
           van=true;
        }
    }
    if(van) cout << szo1 << endl;  ///a bekért szót itt iratjuk ki
    else cout << "Nincs a szótárban anagramma." << endl;

    ///6. feladat
    cout << "6. feladat: A leghosszabb szó anagrammái: " << endl;
    string leghosszabbSzo=szavak[0];
    string hosszuSzavak[db];
    unsigned int maxSzohossz=szavak[0].length();
    ///elöször meghatározzuk a legnagyobb szóhosszt
    for(int i=0; i<szavakDb; i++) {
        if(szavak[i].length()>maxSzohossz)  maxSzohossz=szavak[i].length();
    }
    ///a legnagyobb szóhosszal rendelkezö szavakat kigyüjtjük
    k=0;
    for(int i=0; i<szavakDb; i++) {
        if(szavak[i].length()==maxSzohossz) {
           hosszuSzavak[k]=szavak[i];
           k++;
        }
    }
    ///sorbarendezzük a karakterszerint sorbarendezett szavakat
    for(i=0; i<k; i++){
        for(int j=i+1; j<k; j++){
            if(sorbarendezes(hosszuSzavak[j])<sorbarendezes(hosszuSzavak[i])){
                string csere=hosszuSzavak[j];
                hosszuSzavak[j]=hosszuSzavak[i];
                hosszuSzavak[i]=csere;
            }
        }
        cout << hosszuSzavak[i] << endl; ///kiirjuk

    }

    ///7. feladat
    cout << "7. feladat: rendezés " << endl;
    for(i=0; i<szavakDb-1; i++){
        for(int j=i+1; j<szavakDb; j++){
            ///sorberendezzük az anagrammak szerint
            if(sorbarendezes(szavak[j])<sorbarendezes(szavak[i])){
                    string csere=szavak[j];
                    szavak[j]=szavak[i];
                    szavak[i]=csere;
                }
            ///azon belül szó hossz szerint
            if(szavak[j].length()<szavak[i].length()){
                string csere=szavak[j];
                szavak[j]=szavak[i];
                szavak[i]=csere;
            }
        }
    }
    ofstream ki2;
    ki2.open("rendezve.txt");
    if(ki2.fail()){
        cout << "A fájl olvasása sikertelen";
        cin.get();
        exit(-1);
    }
    for(i=0; i<szavakDb; i++){
        ki2 << szavak[i] << " ";
        if(sorbarendezes(szavak[i])!=sorbarendezes(szavak[i+1]))  {

                ki2 << endl;

        }
        if(szavak[i].length()!=szavak[i+1].length())  {

                ki2 << endl;

        }
    }

    ki2.close();
    cout << "A fájlba írás sikerült." << endl;
    cin.get();
    return 0;
}

string sorbarendezes(string szoveg){
    stringstream sorbarendezett;
    for(unsigned int i=0; i<szoveg.length(); i++) {
        for(unsigned int j=i+1; j<szoveg.length(); j++) {
            if(szoveg[j]<szoveg[i]) {
                char csere = szoveg[j];
                szoveg[j]=szoveg[i];
                szoveg[i]=csere;            }
        }
        sorbarendezett<<szoveg[i];
    }
return sorbarendezett.str();
}
