/*

08.cas-_StringPocetakStruktura.pdf

4. Implementirati funkciju koja na osnovu zadatog stringa kreira novi
string koji sadrzi najduzi podstrig samoglasnika.

Ulazni string: 12 fg aaa bvcf ssd ae

Izlazni string: aaa

*/

#include <stdio.h>
#include <string.h>
#include <ctype.h>


// Vraca 1 ako je karakter ch samoglasnik, inace vraca 0
int IsSamoglasnik( char ch )
{
    ch = tolower(ch);   // ako je veliko slovo, pretvori ga u malo, radimo sa malim slovima

    if ( ch == 'a' ||  ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' )
        return 1;
    else
        return 0;
} // IsSamoglasnik()


void Izvestaj( char *naslov, char *tekst, char *NajduziPodstring, int i, int dnp, int ipnp, int Tdnp, int Tipnp )
{
    printf("\n-- i = %d ------ %s --------------\n", i, naslov);
    printf("\n tekst[%d]=%c , tekst=|%s| , NajduziPodstring=|%s| \n",
           i, tekst[i], tekst, NajduziPodstring );
    printf("\n dnp %d \t ipnp %d \t Tdnp %d \t Tipnp %d \n",
               dnp, ipnp, Tdnp, Tipnp );
//    getch();
} // Izvestaj()


// Ova funkcija sluzi da bi se pratilo kako funkcija radi
char* NajduziPodstringSamoglasnikaSaIzvestajima( char *tekst, char *NajduziPodstring )
{
    int i=0, DuzinaTeksta;
    int dnp=0, ipnp=0, Tdnp=0, Tipnp=0; // T znaci privremen, temporary
    char TNajduziPodstring[100]="";

    DuzinaTeksta = strlen(tekst);   // strlen() ne broji znak na kraju stringa '\0'
    printf("\n\n DuzinaTeksta = %d \n\n", DuzinaTeksta );


    while( tekst[i] ){  // Od pocetka do kraja stringa tekst, ponavljamo sledece:

        Tdnp = 0; // resetujemo privremeni brojac duzine najduzeg podstringa samoglasnika za novo brojanje
        Izvestaj(" Na pocetku ", tekst, NajduziPodstring, i, dnp, ipnp, Tdnp, Tipnp);

        // dok ne naidjes na samoglasnik ili do kraja stringa, preskaci znakove
        while( !IsSamoglasnik( tekst[i] ) && tekst[i] != '\0' ) {

            Izvestaj(" while nisu samoglasnici ", tekst, NajduziPodstring, i, dnp, ipnp, Tdnp, Tipnp);
            i++;    // preskaci znakove uvecavanjem indeksa
        }

        // sada smo na prvom novom samoglasniku ili smo na kraju stringa tekst
        Tipnp = i; // pamtimo indeks (to mesto) prvog novog samoglasnika)

        // dok je samoglasnik ili do kraja stringa, broj samoglasnike
        while( IsSamoglasnik( tekst[i] ) && tekst[i] ) {    // ne mora  tekst[i] != '\0'
            TNajduziPodstring[Tdnp]= tekst[i];
            Tdnp++;
            i++;
            Izvestaj(" while samoglasnici ", tekst, NajduziPodstring, i, dnp, ipnp, Tdnp, Tipnp);
        }

        // sada vise nismo na samoglasniku ili smo na kraju stringa tekst
        if ( dnp < Tdnp ) {     // dnp je uvek duzina najduzeg dosadasnjeg podstringa samoglasnika
            dnp = Tdnp;         // sada je to duzina najduzeg podstringa samoglasnika
            ipnp = Tipnp;       // sada je to indeks (mesto pocetka) najduzeg podstringa samoglasnika
            strcpy( NajduziPodstring, TNajduziPodstring );
        }

    } // while( tekst[i] )



    Izvestaj(" Na kraju ", tekst, NajduziPodstring, i, dnp, ipnp, Tdnp, Tipnp);

    return NajduziPodstring;
} // NajduziPodstringSamoglasnikaSaIzvestajima()


// Vraca najduzi podstring samoglasnika iz stringa tekst
// Cilj je da nadjemo duzinu najduzeg podstringa dnp i indeks pocetka najduzeg podstringa ipnp
// Od pocetka do kraja stringa tekst, ponavljamo sledece:
// - dok ne naidjes na samoglasnik ili do kraja stringa, preskaci znakove
// - dok je samoglasnik ili do kraja stringa, broj samoglasnike
char* NajduziPodstringSamoglasnika( char *tekst, char *NajduziPodstring )
{
    int i=0, DuzinaTeksta;
    int dnp=0, ipnp=0, Tdnp=0, Tipnp=0; // T znaci privremen, temporary
    char TNajduziPodstring[100]="";

    DuzinaTeksta = strlen(tekst);   // strlen() ne broji znak na kraju stringa '\0'
//    printf("\n\n DuzinaTeksta = %d \n\n", DuzinaTeksta );

    while( tekst[i] ){  // Od pocetka do kraja stringa tekst, ponavljamo sledece:

        Tdnp = 0; // resetujemo privremeni brojac duzine podstringa samoglasnika za novo brojanje

        // dok ne naidjes na samoglasnik ili do kraja stringa, preskaci znakove
        while( !IsSamoglasnik( tekst[i] ) && tekst[i] ) {
            i++;    // preskaci znakove uvecavanjem indeksa
        }

        // sada smo na prvom novom samoglasniku ili smo na kraju stringa tekst
        Tipnp = i; // pamtimo indeks (to mesto) prvog novog samoglasnika)

        // dok je samoglasnik ili do kraja stringa, broj samoglasnike
        while( IsSamoglasnik( tekst[i] ) && tekst[i] ) {    // ne mora  tekst[i] != '\0'
            TNajduziPodstring[Tdnp]= tekst[i];
            Tdnp++;
            i++;
        }

        // sada vise nismo na samoglasniku ili smo na kraju stringa tekst
        if ( dnp < Tdnp ) {     // dnp je uvek duzina najduzeg dosadasnjeg podstringa samoglasnika
            dnp = Tdnp;         // sada je to duzina najduzeg podstringa samoglasnika
            ipnp = Tipnp;       // sada je to indeks (mesto pocetka) najduzeg podstringa samoglasnika
            strcpy( NajduziPodstring, TNajduziPodstring );
        }

    } // while( tekst[i] )

    printf("\n Najduzi podstring samoglasnika pocinje na %d mestu i dugacak je %d samoglasnika. \n",
           ipnp+1, dnp );

    return NajduziPodstring;
} // NajduziPodstringSamoglasnika()




int main(void)
{
    char tekst[100]; //="12 fg aaa bvcf ssd ae";
    char NajduziPodstring[100];
    int DuzinaTeksta;

//    strcpy(tekst, "12 fg aaa bvcf ssd ae" );

    printf("\n\n Unesi tekst sa slovima i/ili ciframa: ");
    gets(tekst);

    if (strlen(tekst)==0){
        printf("\n Nisi uneo tekst ! \n");
        printf("\n\n");
        system("PAUSE");
        exit(1);
    }

    printf("\n U tekstu: |%s| najduzi podstring samoglasnika je: |%s|\n\n",
           tekst, NajduziPodstringSamoglasnika(tekst, NajduziPodstring) );

/*
  // Ovo sluzi da bi se pratilo kako funkcija radi
    printf("\n\n U tekstu: |%s| najduzi podstring samoglasnika je: |%s|\n\n",
           tekst, NajduziPodstringSamoglasnikaSaIzvestajima(tekst, NajduziPodstring) );
*/



    printf("\n\n");
    system("PAUSE");
//    system("del *.o");
    return 0;
}