/*
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;
}