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