Programiranje 1 programski jezik c
This presentation is the property of its rightful owner.
Sponsored Links
1 / 40

Programiranje 1 programski jezik c PowerPoint PPT Presentation


  • 103 Views
  • Uploaded on
  • Presentation posted in: General

Programiranje 1 programski jezik c. Staša Vujičić Čas 12 V 1.2. Stringovi – osnovni pojmovi. Niska karaktera ili string je niz karaktera koji se zavr š ava karakterom '\0'. Karakter '\0' ima ASCII vrednost 0 pa se mo ž e tuma č iti kao logi č ka vrednost ”neta č no”.

Download Presentation

Programiranje 1 programski jezik c

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programiranje 1 programski jezik c

Programiranje 1 programski jezik c

Staša Vujičić

Čas 12

V 1.2


Stringovi osnovni pojmovi

Stringovi – osnovni pojmovi

  • Niska karaktera ili string je niz karaktera koji se završava karakterom '\0'.

  • Karakter '\0' ima ASCII vrednost 0 pa se može tumačiti kao logička vrednost”netačno”.


Stringovi osnovni pojmovi1

Stringovi – osnovni pojmovi

  • Format za ispis niske pomoću funkcije printf je %s.

  • Konstante tipa niska se navode izmeđuznakova navodnika. Na primer:

    char s[]="Primer stringa";

    Pri tome je s niska od 15 karaktera:

    {'P', 'r', 'i', 'm', 'e', 'r', ' ', 's', 't', 'r', 'i', 'n', 'g', 'a', '\0'}


Deklaracija i inicijalizacija stringova

DEKLARACIJA i INICIJALIZACIJA STRINGOVA

char s1[] = {‘s’, ‘t’, ‘r’,’i’,’n’,’g’,’ ’, ‘1’ ‘\0’};

char s2[] = “string 2”;

char *s3 = “string 3”;

  • String može sadržati sve karaktere, ne samo slova

  • Svaki string se završava simbolom ‘\0’ – string terminator


Tampanje stringova

ŠTAMPANjE STRINGOVA

  • Bez obzira kako je string deklarisan I inicijalizovan, uvek se može štampati ovako:

    printf (“s1 = %s\n”, s1);


U itavanje stringova

UČITAVANjE STRINGOVA

char s1[MAX];

char *s2;

scanf(“%s”, s1); OK, ako je učitan string dužine <MAX

scanf(“%s”, s2); !POGREŠNO: “Segmentation fault”

(pogledati primere)

  • ! %s učitava niz neblanko karaktera


Pristup karakterima stringa

PRISTUP KARAKTERIMA STRINGA

char s[]=“neki string”;

  • indeksno: int i;

    karakteri stringa: s[0],s[1],…

    poslednji element je uvek ‘\0’

    adrese karaktera: &s[0], &s[1],…

  • pokazivački:

    karakteri stringa: *s, *(s+1), …

    Adrese karaktera: s, s+1,…


Programiranje 1 programski jezik c

8

Kakva je razlika između ’s’ i ”s”?

’s’ je karakter

”s” je string ili niz od dva karaktera 's' i '\0'.


Primer 5

Primer 5

  • Obrni string - obrće nisku karaktera.

    #include <stdio.h>

    /* Ova funkcija racuna duzinu date niske karaktera. Umesto nje, moguce je koristiti standardnu funkciju strlen .*/

    int duzina_stringa(char s[])

    {

    int i;

    for (i = 0; s[i]; i++);

    return i;

    }


Programiranje 1 programski jezik c

/* Funkcija obrce nisku karaktera */

void obrni_string(char s[])

{

int i, j;

for (i = 0, j = duzina_stringa(s)-1; i<j; i++, j--)

{

int pom = s[i];

s[i] = s[j];

s[j] = pom;

}

}


Programiranje 1 programski jezik c

main()

{

char s[] = "Zdravo svima";

obrni_string(s);

printf("%s\n", s);

}

Izlaz:

amivs ovardZ


Primer 6

Primer 6

  • Uklanja beline, tabulatore ili znak za kraj reda sa kraja stringa.

    int ukloni(char s[])

    {

    int i;

    for (i = strlen(s)-1; i >= 0; i--)

    if (s[i] != ' ' && s[i] != '\t' && s[i] != '\n')

    break;

    s[i+1] = '\0';

    return i;

    }


Funkcije biblioteke string h

Funkcije biblioteke <string.h>

  • strcpy (string copy)

    char *strcpy(char *s1, const char*s2);

  • strcpy kopira string s2 u string s1

  • strcpy vraća pokazivač na prvi karakter stringa s1

  • strcpypodrazumeva da je string s2 dovoljno velik za smeštanje celog stringa s1; neophodno je voditi računa o dimenziji niza s1 (pogledati demonstraciju funkcije)

  • !!! Stringovi se ne mogu kopirati naredbom dodele (npr s1=s2 je pogrešan način za kopiranje stringova)

    (pogledati primer)

  • strcpy (string copy)

    char *strcpy(char *s1, const char*s2);

  • strcpy kopira string s2 u string s1

  • strcpy vraća pokazivač na prvi karakter stringa s1

  • strcpypodrazumeva da je string s2 dovoljno velik za smeštanje celog stringa s1; neophodno je voditi računa o dimenziji niza s1 (pogledati demonstraciju funkcije)

  • !!! Stringovi se ne mogu kopirati naredbom dodele (npr s1=s2 je pogrešan način za kopiranje stringova)

    (pogledati primer)

  • strcpy (string copy)

    char *strcpy(char *s1, const char*s2);

  • strcpy kopira string s2 u string s1

  • strcpy vraća pokazivač na prvi karakter stringa s1

  • strcpypodrazumeva da je string s2 dovoljno velik za smeštanje celog stringa s1; neophodno je voditi računa o dimenziji niza s1 (pogledati demonstraciju funkcije)

  • !!! Stringovi se ne mogu kopirati naredbom dodele (npr s1=s2 je pogrešan način za kopiranje stringova)

    (pogledati primer)


Funkcije biblioteke string h1

Funkcije biblioteke <string.h>

  • strcat (string concatanate)

    char *strcat(char *s1, const char*s2);

  • strcatnadovezuje string s2 na string s1

  • strcat vraća pokazivač na prvi karakter stringa s1

  • strcatpodrazumeva da je string s2 dovoljno velik za smeštanje svih nadovezanih karaktera stringa s1; neophodno je voditi računa o dimenziji niza s1 (pogledati demonstraciju funkcije)

    (pogledati primer)


Funkcije biblioteke string h2

Funkcije biblioteke <string.h>

  • strcmp (string compare)

    int strcmp(const char *s1, const char *s2);

  • strcmp poredi dva stringa

  • strcmp vraća:

    0, ako je su s1 i s2 jednake

    <0, ako je s1 leksikografski ispred s2

    (tj poredak s1,s2 jeste leksikografski ispravan)

    >0, ako je s1 leksikografski iza s2

    (tj poredak s1,s2 nije leksikografski ispravan)

  • !!! Stringovi se ne mogu porediti relacionim operatorima (npr s1<s2 je pogrešan način za poređenje stringova)

    (pogledati primer)


Funkcije biblioteke string h3

Funkcije biblioteke <string.h>

  • strstr (string string)

    char *strstr(const char *s1, const char *s2)

  • strstr ispituje da li je niska s2 podstring niske s1

  • Ako jeste, strstr vraća adresu one pozicije u niski s1 odakle počinje niska s2; u suprotnom, vraća NULL

    (pogledati primer)


Funkcije biblioteke string h4

Funkcije biblioteke <string.h>

  • strchr (string string)

    char *strchr(const char *s1, int c)

  • strchr ispituje da li se karakter c nalazi u niski s1

  • Ako se nalazi, strchr vraća adresu one pozicije u niski s1 gde se karakter c prvi put pojavljuje; u suprotnom, vraća NULL

    (pogledati primer)


Primer 7

Primer 7

#include <stdio.h>

/* Kopira string src u string dest.Pretpostavlja da u dest ima dovoljno prostora. */

void kopiraj_string(char dest[], char src[])

{

int i;

/* Kopira karakter po karakter, sve dok nije iskopirankarakter '\0' */

for (i = 0; src[i]!='\0'; i++)

dest[i]=src[i];

dest[i]=‘\0’;

}


Programiranje 1 programski jezik c

/* Nadovezuje string t na kraj stringa s.

Pretpostavlja da u s ima dovoljno prostora. */

void nadovezi_stringove(char s[], char t[])

{

int i, j;

/* Pronalazimo kraj stringa s */

for (i = 0; s[i]; i++);

/* Vrsi se kopiranje, slicno f-ji kopiraj_string */

for (j = 0; s[i] = t[j]; j++, i++);

s[i]=‘\0’;

}


Programiranje 1 programski jezik c

/* strcmp - Vrsi leksikografsko poredjenje dva stringa.

Vraca :

0 - ukoliko su stringovi jednaki

<0 - ukoliko je s leksikografski ispred t

>0 - ukoliko je s leksikografski iza t */

int uporedi_stringove(char s[], char t[])

{

/* Petlja tece sve dok ne naidjemo na prvi razlicit karakter */

int i;

for (i = 0; s[i]==t[i]; i++)

if (s[i] == '\0')

/* Naisli smo na kraj oba stringa, a nismo nasli razliku */

return 0;

/* s[i] i t[i] su prvi karakteri u kojima se niske razlikuju.

Na osnovu njihovog odnosa, odredjuje se odnos stringova*/

return s[i] - t[i];

}


Programiranje 1 programski jezik c

/* Vraća indeks prvog pojavljivanja karaktera c u niski s ili -1 ako se ne pojavljuje*/

int string_char(char s[], char c)

{

int i;

for (i = 0; s[i]; i++)

if (s[i] == c)

return i;

/* Nije nadjeno */

return -1;

}


Programiranje 1 programski jezik c

/* Pronalazi poslednju poziciju karaktera c u stringu s, odnosno -1 ukoliko s ne sadrži c */

int string_poslednji_char(char s[], char c)

{

/* Pronalazimo kraj stringa s */

int i;

for (i = 0; s[i]; i++);

/* Krecemo od kraja i trazimo c unazad */

for (i--; i>=0; i--)

if (s[i] == c)

return i;

/* Nije nadjeno */

return -1;

}


Programiranje 1 programski jezik c

/* Proverava da li string str sadrzi string sub.Vraca poziciju na kojoj sub pocinje, odnosno -1 ukoliko ga nema */

int string_string(char str[], char sub[])

{

int i, j;

/* Proveravamo da li sub pocinje na svakoj poziciji i */

for (i = 0; str[i]; i++)

/* Poredimo sub sa str pocevsi od poziciji i sve dok ne naidjemo na razliku */

for (j = 0; str[i+j] == sub[j]; j++)

/* Nismo naisli na razliku a ispitali smosve karaktere niske sub */

if (sub[j+1]=='\0')

return i;

/* Nije nadjeno */

return -1;

}


Programiranje 1 programski jezik c

main()

{char s[100];

char t[] = "Zdravo";

char u[] = " svima";

kopiraj_string(s, t);

printf("%s\n", s);

nadovezi_stringove(s, u);

printf("%s\n", s);

printf("%d\n",string_char("racunari", 'n'));

printf("%d\n",string_poslednji_char("racunari", 'a'));

printf("%d\n",string_string("racunari", "rac"));

printf("%d\n",string_string("racunari", "ari"));

printf("%d\n",string_string("racunari", "cun"));

printf("%d\n",string_string("racunari", "cna"));

}


Programiranje 1 programski jezik c

  • Izlaz:

    Zdravo

    Zdravo svima

    4

    5

    0

    5

    2

    -1


Primer 8

Primer 8

  • Funkcija koja uklanja znak c kad god se pojavi u stringu s.

    #include <stdio.h>

    void sazimanje(char s[], char c)

    {

    int i,j;

    for(i=j=0; s[i]!='\0';i++)

    if(s[i]!=c) s[j++]=s[i];

    s[j]='\0';

    }


Programiranje 1 programski jezik c

main()

{

char niz[20];

char c;

printf("Unesi karakter\n\n");

scanf("%c", &c);

scanf("%s", niz);

sazimanje(niz, c);

printf("%s\n", niz);

}


Primer 9

Primer 9

28

Program na osnovu niske cifara broja u dekadnom zapisu izračunava vrednost broja, kao i obrnuto: na osnovu vrednosti broja formira string koji sadrži zapis brojau dekadnom sistemu.

(pogledati primer)

#include <stdio.h>

#define MAX 12


Programiranje 1 programski jezik c

29

/* Funkcija ucitava string sa ulaza u niz na ciji pocetak pokazuje pokazivac s, duzine max karaktera */

void ucitaj_string (char s[], int max)

{

int c;

int i;

for (i = 0;

(c = getchar ()) != EOF && c != ' ' && c != '\t' && c != '\n'

&& i < max - 1; i++)

s[i] = c;

s[i] = '\0';

}


Programiranje 1 programski jezik c

30

/* Funkcija vraca broj koji je zapisan u dekadnom obliku u stringu na koji pokazuje s. Na pocetku stringa su dozvoljene vodece beline, nakon cega sledi opcioni znak, i na kraju same cifre broja. Eventualni karakteri nakon cifara se ignorisu. Ova funkcija je identicna funkciji atoi() iz standardne biblioteke */

intatoi_klon (char s[])

{

int a = 0;/*Promenljiva u kojoj akumuliramo vrednost */

int znak = 1;/* Znak (inicijalno +) */

/* Preskacemo beline */

while (*s == ' ' || *s == '\t')

s++;


Programiranje 1 programski jezik c

31

/* Prvi ne-blanko karakter je ili cifra, ili znak. Ako je znak u pitanju, tada po potrebi azuriramopromenljivu znak, i prelazimo na sledeci karakter. */

if (*s == '-')

{

znak = -1;

s++;

}

else if (*s == '+')

s++;


Programiranje 1 programski jezik c

32

/* Racunamo vrednost broja */

while (*s >= '0' && *s <= '9')

{

a = 10 * a + *s - '0';

s++;

}

/* Vracamo vrednost broja */

return znak * a;

}


Programiranje 1 programski jezik c

33

/* Funkcija obrni() obrce karaktere stringa */

voidobrni (char cifre[])

{

char *p = cifre, *q;

/* Petlja postavlja q da pokazuje na poslednji karakter u stringu. Pri tom se pod poslednjim podrazumeva karakter pre znaka '\0', koji se ne smatra delom stringa. */


Programiranje 1 programski jezik c

34

for (q = cifre; *q != '\0'; q++);

q--;

/* Obrtanje niza */

for (; p < q; p++, q--)

{

char t = *p;

*p = *q;

*q = t;

}

}


Programiranje 1 programski jezik c

35

/* Funkcija na osnovu broja a kreira string sastavljen od dekadnih cifara broja a, sa eventualnim predznakom '-' */

void itoa (int a, char cifre[])

{

int znak = 1;

char *s = cifre;


Programiranje 1 programski jezik c

36

/* Racunamo znak i apsolutnu vrednost */

if (a < 0)

{

a = -a;

znak = -1;

}


Programiranje 1 programski jezik c

37

/* Izdvajamo cifre zdesna u levo i smestamo ih u string. */

do

{

*s = a % 10 + '0';

a /= 10;

s++;

}

while (a);


Programiranje 1 programski jezik c

38

/* Dopisujemo znak, ako je '-' */

if (znak == -1)

*s++ = ‘-‘;

/* "Zatvaramo" string, na propisan nacin */

*s = ‘\0‘;

/* Obrcemo karaktere stringa */

obrni (cifre);

}


Programiranje 1 programski jezik c

39

int main ()

{

char cifre[MAX];

int a;

/* Ucitavamo string */

printf ("Uneti string oblika (+|-)dddd ");

ucitaj_string (cifre, MAX);

/* Dobijamo broj iz stringa */

a = atoi_klon (cifre);

/* Prikazujemo broj */

printf ("Vrednost broja %d\n", a);


Programiranje 1 programski jezik c

40

/* Ucitavamo broj */

printf ("Unesite broj: ");

scanf ("%d", &a);

/* Kreiramo string sa ciframa */

itoa (a, cifre);

/* Prikazujemo string */

printf ("String sa ciframa broja: ");

printf (“%s”, cifre);

}


  • Login