﻿// Bontsuk fel egy szöveget a szóközök mentén, tegyük az így kapott 
// szavakat egy listába.
#include <iostream>
using namespace std;

// visszatéríti a szavak számát, feltölti a listát
int szavakra_bont(char str[100], char lista[100][100])
{
    int hany_szo=0;
    int hany_betu=0;
    for (int i = 0; str[i] != '\0'; i++) {
        if (str[i] == ' ') {
            if(hany_betu != 0){
                lista[hany_szo][hany_betu]='\0';
                hany_szo++;
                hany_betu=0;
            }
        }
        else {
            lista[hany_szo][hany_betu]=str[i];
            hany_betu++;
        }
    }
    if(hany_betu != 0){
        lista[hany_szo][hany_betu]='\0';
        hany_szo++;
    }
    return hany_szo;
}


void masol(char hova[], char honnan[])
{
    int i = 0;
    while (honnan[i] != '\0') {
        hova[i] = honnan[i];
        i++;
    }
    hova[i] = '\0';
}


int hasonlit(char s1[], char s2[])
{
    int i = 0;
    while (s1[i] == s2[i] && s1[i] != '\0')
        i++;

    if (s1[i] > s2[i])
        return 1;
    else if (s1[i] == s2[i])
        return 0;
    else
        return -1;
}


void rendez(int n, char lista[100][100])
{
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            // ha a j-edik kisebb, mint az i-edik
            if (hasonlit(lista[j], lista[i]) < 0) {
                // cseréljük fel őket
                char seged[100];
                masol(seged, lista[j]);
                masol(lista[j], lista[i]);
                masol(lista[i], seged);
            }
        }
    }
}


void rendez_csokkenobe(int n, char lista[100][100])
{
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            // ha a j-edik kisebb, mint az i-edik
            if (hasonlit(lista[j], lista[i]) > 0) {
                // cseréljük fel őket
                char seged[100];
                masol(seged, lista[j]);
                masol(lista[j], lista[i]);
                masol(lista[i], seged);
            }
        }
    }
}


int main()
{
    char lista[100][100];

    int n = szavakra_bont("  geza kek   az   eg   ", lista);

    cout << n << endl; // 4
    for (int i = 0; i < n; i++) {
        cout << lista[i] << endl;
    }
    /*
        geza
        kek
        az
        eg
    */

    // Rendezzük abc-sorrendbe a kapott szavakat!

    rendez(n, lista);

    cout << "------------" << endl;

    for (int i = 0; i < n; i++)
        cout << lista[i] << endl;
    /*
        az
        eg
        geza
        kek
    */

    rendez_csokkenobe(n, lista);

    cout << "------------" << endl;

    for (int i = 0; i < n; i++)
        cout << lista[i] << endl;
    /*
        kek
        geza
        eg
        az
    */


    return 0;
}
