/*

Funkcije za rad sa znakovima (ctype.h)

isalpha(c);     // ispituje da li je c slovo
isdigit(c);     // ispituje da li je c broj
isalnum(c);     // ispituje da li je c slovo ili broj

isspace(c);     // ispituje da li je c neki od sledecih znakova:
                // ' ' , '\t' , '\n' , '\v' , '\f' , '\r'  ili neka belina
isupper(c);     // ispituje da li je c veliko slovo
islower(c);     // ispituje da li je c malo slovo

ispunct(c);     // ispituje da li je c znak interpunkcije

tolower(c);     // pretvara c u malo slovo
toupper(c);     // pretvara c u veliko slovo

------------------------------------------------------------------------------

Funkcije za rad sa stringovima (string.h)

strcpy(d,s);    // kopira string s u string d,
                // unapred pretpostavljajuci da u stringu d ima dovoljno mesta

strcat(d,s);    // nadovezuje string s na string d ( ConcATenate )

strncat(d,s,n); // nadovezuje n znakova stringa s na string d

strcmp(a,b);    // uporedjuje stringove a i b i vraca:  ( CoMPare )
                //  -1 za a<b
                //   0 za a=b
                //   1 za a>b

strncmp(a,b);   // uporedjuje prvih n znakova stringova a i b

strcmpi(a,b);   // ista kao funkcija stcmp
                // samo sto se sva slova pretvaraju u mala radi poredjenja

strchr(s,c);    // vraca pokazivac na prvu pojavu znaka c u stringu s

strstr(s,t);    // vraca pokazivac na prvu pojavu stringa t u stringu s

strlen(s);      // vraca duzinu stringa s  ( LENght )

strpbrk(s,t);   // vraca pokazivac na prvu pojavu bilo kog znaka stringa t u stringu s
                // ili NULL ako nema takvih

*/

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

#define MAX_DUZINA_STRINGA 256


// Prikazuje u dva reda lenjir sa indeksima
void prikazi_lenjir( int n ){

    int i, cifra=0;

    printf("\n             ");      // pocetni razmak za prvu deseticu
    for(i=1;i<n/10+1;i++)           // prikazuje desetice za indekse
        printf("%10d", i );

    printf("\nIndeksi su: ");
    for(i=0;i<n;i++) {              // prikazuje jedinice za indekse
        printf("%d", cifra++ );
        if( cifra > 9 )
            cifra = 0;
    }
    printf("\n");
}


// Prikazuje string iznad kojeg je lenjir sa dva reda indeksa
void prikazi_string_sa_lenjirom( char s[] ){

    int n = strlen(s);  // n je duzina stringa s

    prikazi_lenjir(n);

    printf("\n String je: %s \n", s);
}


// Vraca string na pocetnu vrednost
void resetuj_string( char s[] ){

    strcpy(s,"Ovo je primer stringa");

}


// Vraca 1 ako je karakter ch samoglasnik, inace vraca 0
int IsSamoglasnik( char ch ){

    // ako je veliko slovo, pretvori ga u malo i zatim radimo sa malim slovima
    ch = tolower(ch);

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


// Vraca 1 ako je karakter ch suglasnik, inace vraca 0.
// Ako je ch slovo i nije samoglasnik, onda je suglasnik.
int IsSuglasnik( char ch ){

    // moze i ovako:  if( isalpha(ch) )
    if( 'A'<=ch && ch <= 'Z'  ||  'a'<=ch && ch <= 'z' )    // ako je ch slovo
        if ( !IsSamoglasnik(ch))                            // ako ch nije samoglasnik
            return 1;                                       // vraca 1

    return 0;                                               // inace vraca 0
}


// U stringu s brise sve pojave znaka KojiZnak
void obrisi_znak_iz_stringa(char s[],char KojiZnak){

    int i=0, j=0, n = strlen(s);

    while( i < n ){                     // od pocetka do kraja stringa s

        while( s[i]!=KojiZnak && i<n )  // dok znak nije KojiZnak ili do kraja stringa s
            s[j++]=s[i++];              // pakuj znakove u novi string s

        while( s[i]==KojiZnak && i<n )  // dok je znak KojiZnak ili do kraja stringa s
            i++;                        // preskaci znak
    }
    s[j]='\0';                          // zavrsavamo novi string s
}


// Vraca 1 ako znak KojiZnak postoji u stringu s, inace vraca 0
int postoji_u_stringu(char s[],char KojiZnak){

    int i, n = strlen(s);

    for(i=0;i<n;i++)
        if( s[i] == KojiZnak )
            return 1;           // ako smo nasli KojiZnak,   vraca 1
    return 0;                   // ako nismo nasli KojiZnak, vraca 0
}


// Vraca 1 ako znak KojiZnak postoji u stringu s, inace vraca 0
int broj_pojavljivanja_u_stringu(char s[],char KojiZnak){

    int i, brojac=0, n = strlen(s);

    for(i=0;i<n;i++)
        if( s[i] == KojiZnak )
            brojac++;           // broji pojave KojiZnak u stringu s
    return brojac;              // vraca broj pojava KojiZnak u stringu s
}


// U stringu s1 brise znakove koji se nalaze u stringu s2
// Vraca broj obrisanih znakova
int u_s1_obrisi_znakove_s2( char s1[], char s2[] ){

    int i, br_obrisanih=0, n1=strlen(s1), n2=strlen(s2);    // i je indeks za s1

    for(i=0;i<n1;i++)                                       // prolazimo kroz s1
        if( postoji_u_stringu(s2,s1[i]) ){                  // ako taj znak s1[i] postoji u s2
            obrisi_znak_iz_stringa(s1,s1[i]);               // brisemo ga iz s1
            br_obrisanih++;                                 // brojimo obrisane znake
        }
    return br_obrisanih;
}



int main(void)
{
    char c='r';
    char s[MAX_DUZINA_STRINGA]="Ovo je primer stringa";
    char s2[MAX_DUZINA_STRINGA]="ors";

    printf("\n Spisak funkcija za rad sa znakovima i stringovima. \n");

    prikazi_string_sa_lenjirom(s);

    if (IsSamoglasnik(c))
        printf("\n\n '%c' je samoglasnik \n",c);

    if (IsSuglasnik(c))
        printf("\n\n '%c' je suglasnik \n",c);

    if (postoji_u_stringu(s,c))
        printf("\n '%c' postoji u stringu s \n",c);
    else
        printf("\n '%c' postoji u stringu s \n",c);

    printf("\n '%c' se u stringu |%s| pojavljuje %d puta.\n",
            c,s,broj_pojavljivanja_u_stringu(s,c));


    printf("\n\n U stringu s brisemo sve znakove '%c' i sada je string s: ");
    obrisi_znak_iz_stringa(s,c);
    prikazi_string_sa_lenjirom(s);

    printf("\n\n Resetujemo string s na pocetnu vrednost: ");
    resetuj_string(s);
    prikazi_string_sa_lenjirom(s);


    printf("\n\n U stringu s brisemo sve znakove koji su u stringu |%s| \n (ima ih %d) i sada je string s: ",
            s2,u_s1_obrisi_znakove_s2(s,s2));
    prikazi_string_sa_lenjirom(s);

    printf("\n\n Resetujemo string s na pocetnu vrednost: ");
    resetuj_string(s);
    prikazi_string_sa_lenjirom(s);


    printf("\n\n");
    system("PAUSE");
    return 0;
}