uvod u programiranje predavanja 5

36
Увод у програмски Увод у програмски језик језик C C Знакови и низови знакова-стрингови Електротехнички факултет у Источном Сарајеву

Upload: dragan-kikic

Post on 02-Dec-2015

283 views

Category:

Documents


13 download

DESCRIPTION

uvod u programoranje

TRANSCRIPT

Page 1: uvod u programiranje predavanja 5

Увод у програмски језик Увод у програмски језик CC

Знакови и низови знакова-стрингови

Електротехнички факултет у Источном Сарајеву

Page 2: uvod u programiranje predavanja 5

2

СадржајСадржај

Знакови (character)

•Кодирање знакова

•Константе

•Матрице знакова

•Улазно излазна конверзија

•Библиотечке функције за рад са знаковима

Page 3: uvod u programiranje predavanja 5

3

Знакови Знакови ((character)character)

• C има само нумеричке типове података.

• Потреба за рад са текстом.

• Постоји тип char– целобројан тип – предвиђен за представљање појединачних

карактера

• За представљање низа знакова (текстова) променљиве дужине, који се називају знаковни низови користи се низ типa char.

Page 4: uvod u programiranje predavanja 5

4

Кодирање знакова Кодирање знакова ((ASCIIASCII кôд)кôд)

Page 5: uvod u programiranje predavanja 5

5

Знаковне константеЗнаковне константе• Знаковна константа је цели број чија је вредност једнака

кôду жељеног знака • Податку типа char се може доделити кôд жељеног знака

или сам знак написан под JЕДНОСТРУКИМ знаковима навода.

#include <stdio.h>main(){ char c1, c2, c3; c1='A'; c2=65; c3='#'; printf("Vrednost znakova: c1=%c, c2=%c, c3=%c\

n",c1,c2,c3);}Vrednost znakova: c1=A, c2=A, c3=#

Page 6: uvod u programiranje predavanja 5

6

Знаковне константеЗнаковне константе

• Само се децимални бројеви пишу без знакова навода! • Октални бројеви се пишу иза знака косе црте уназад (\)

нпр '\107'.• Хексадецимални број се пише иза знакова \x или \X. Нпр.

'\x51.‘

main(){ char c1, c2, c3; c1='A'; c2=65; c3=‘\x41'; printf("Vrednost znakova: c1=%c, c2=%c, c3=%c\n",c1,c2,c3);

}

Page 7: uvod u programiranje predavanja 5

7

Константе типа знаковног низаКонстанте типа знаковног низа

• Најчешћи термин који се користи за знаковне низове је стринг

• Стринг је секвенца од нула или више знакова који се пишу у овиру ДВОСТРУКИХ знакова навода.

"John L. Johanson"

"Zdravo svima!"• Сваки стринг се завршава са тзв. нул знаком '\0' (null character) .

• Знаковни низ у општем случају не мора (али може) да садржи нул знак ('\0')

Page 8: uvod u programiranje predavanja 5

8

Стринг - низ знаковаСтринг - низ знакова

• 'A' представља један знак: А,

• "A" представља стринг тј. два знака: 'A' и '\0'

• Да би уписали у меморију 'А' потребна је једна меморијска јединица типа char

• За "А" потребно две меморијске јединице: једна за 'А' и једна за '\0'.

• стринг "Zdravo" представља 7 знакова: 'Z','d','r','a','v','o' и '\0'

Page 9: uvod u programiranje predavanja 5

9

СтрингСтринг

• char ime[16]={'J', 'o', 'h', 'n', '\0'}; је исто као и char ime[16]="John";

• char imeА[16]={'J', 'o', 'h', 'n'}; char imeB[16]="John";низови imeА и imeB нису исти.

• Дужина низа се не мора навести уколико се низу додељује почетна вредност char ime[ ]={'J', 'o', 'h', 'n', '\0'}; char ime[ ]="John";

Page 10: uvod u programiranje predavanja 5

10

Симболичке констнатеСимболичке констнате

• #define ZVONO '\a'• #define NOVI_RED '\n'• #define VALUTA "US dollar"

Page 11: uvod u programiranje predavanja 5

11

Стрингови – низови знаковаСтрингови – низови знакова

Стринг је једнодимензионални низ знакова

То је низ знакова који се завршава nullзнаком (знак чији је код 0) ’\0’

Декларација стринга:

char ime[duzina] = ”string” ; или

char ime[duzina] = { znak, znak, … , znak } ;

Пример:char grad1[] = ”Sarajevo” ;

char grad2[] = { ’D’,’O’,’B’,’O’,’J’,’\0’ };

Означавање знаковних и стринг константи:

’D’ – ovo je znak D

”D” – ovo je string ’D’,’\0’

Page 12: uvod u programiranje predavanja 5

12

Матрице знаковаМатрице знаковаchar daniA[7][11]={"ponedeljak", "utorak", ..., "nedelja"};

u t o r a k \0

p o n e d e l j a k \0

s r e d a \0

c e t v r t a k \0

p e t a k \0

s u b o t a \0

n e d e l j a \0

Page 13: uvod u programiranje predavanja 5

13

Матрице знаковаМатрице знакова

поље од 7 показивача, 7 меморијских локација истог типа али различите дужине!

char *daniB[7] ={"ponedeljak", "utorak", ... ,"nedelja"};

0

0

6

3

2

1A

...

...

Page 14: uvod u programiranje predavanja 5

14

Улазно излазна конверзијаУлазно излазна конверзија

#include <stdio.h>main(){ char a[8] = {'A','l','e','k','s','a'}; char b[5] = "Pera"; printf("ispis karaktera: %c\nIspis stringa: %s\n", a[3], b);

}

Излаз:ispis karaktera: kIspis stringa: Pera

Page 15: uvod u programiranje predavanja 5

15

Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије int getchar( void ); • Чита следећи знак, укључујући и беле знакове, са

стандардног улаза (тастатуре).

#include <stdio.h>main (){ char znak; printf ("Unesite tekst. Zavrsite sa tackom:"); do { znak=getchar(); printf("%c",znak); } while (znak != '.');}

Page 16: uvod u programiranje predavanja 5

16

Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије

 putchar (int character ); • Исписује знак преко главног излаза (монитор).

#include <stdio.h>int main (){ char znak; for (znak = 'A' ; znak <= 'Z' ; znak++) { putchar (znak);

}}Излаз:ABCDEFGHIJKLMNOPQRSTUVWXYZ

Page 17: uvod u programiranje predavanja 5

17

Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије

gets (string ); • Чита стринг односно један ред текста (до знака за

прелазак у нови ред тј. \n). Уместо знака \n уписује знак \0.

#include <stdio.h>main(){ char string[256]; printf ("Upisite vasu adresu: "); gets(string); printf ("Vasa adresa je: %s\n",string);}

Page 18: uvod u programiranje predavanja 5

18

Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије

int  puts (string ); • Исписује садржај знаковног низа string

до завршног знака \0 додајући знак за прелазак у нови ред \n иза последњег знака.

#include <stdio.h>int main (){ char string [ ] = "Hello world!"; puts (string);}

Page 19: uvod u programiranje predavanja 5

19

Стрингови – низови знаковаСтрингови – низови знаковаИсписивање стринга-рекапитулација

помоћу функције

printf(”%s”, string);

помоћу функције

puts(string);

Пример:

#include <stdio.h>main(){ char grad[]= ”Sarajevo”; printf(”%s\n”, grad);}

Пример:

#include <stdio.h>main(){ char grad[]= ”Sarajevo”; puts(grad);}

Sarajevo Sarajevo

Page 20: uvod u programiranje predavanja 5

20

Стрингови – низови знаковаСтрингови – низови знаковаУчитавање стринга-рекапитулација

учитавање помоћу функције

scanf(”%s”, string);

Учитавање помоћу функције

gets(string);

Пример:

#include <stdio.h>main(){ char tekst[50]; printf(”Unesi recenicu:\n”); scanf(”%s”, tekst); printf(”%s”, tekst);}

Пример:

#include <stdio.h>main(){ char tekst[50]; printf(”Unesi recenicu:\n”); gets(tekst); printf(”%s”, tekst);}

Unesi recenicu:SLOBODAN I MIRASLOBODAN

Unesi recenicu:SLOBODAN I MIRASLOBODAN I MIRA

Page 21: uvod u programiranje predavanja 5

21

Стрингови – низови знакова:Стрингови – низови знакова:

Пример: Учитати стринг, и одредити и исписати његову дужину.

#include <stdio.h>

main(){ char *s ; int i; char grad[]=”Sarajevo”; s=&grad[0] for (i=0; *s!=’\0’; i++); printf(”Broj slova: %d”, i );}

Broj slova: 8

Page 22: uvod u programiranje predavanja 5

22

Функције за рад са стринговимаФункције за рад са стринговима

Page 23: uvod u programiranje predavanja 5

23

Испитивање и конверзија знаковаИспитивање и конверзија знакова

• int isalpha (int c); /* c је слово? */

• int islower (int c); /* c је мало слово? */

• int isupper (int c); /* c је велико слово? */ • int isdigit (int c); /* c је цифра 0-9 ? */ • int isxdigit (int c); /* c је хекса цифра

0-9,а-f, A-F ? */

• int tolower (int c); /* конвертује у мало слово */ • int toupper (int c); /* конвертује у велико

слово */

Page 24: uvod u programiranje predavanja 5

24

Испитивање знаковаИспитивање знакова

int isalnum(int c); /* с слово или цифра?*/

#include <ctype.h>#include <stdio.h> main() { short int i; for (i = 0; i < 256; i++) { if(isalnum(i)) printf("isalnum (%c) Da\n", i);

else printf("isalnum (%c) Ne\n", i);

}}

Page 25: uvod u programiranje predavanja 5

25

Рад са знаковним низовимаРад са знаковним низовимаstrcpy ( str_dest, str_src ); /* копира стринг */

#include <stdio.h>#include <string.h>main (){ char str1[ ]="Sadrzaj stringa 1"; char str2[40]; char str3[40]; strcpy (str2,str1); strcpy (str3,"Kopiranje uspesno"); printf ("str1: %s\nstr2: %s\nstr3:%s\n", str1,str2,str3);

}

str1: Sadrzaj stringa 1

str2: Sadrzaj stringa 1

str3: Kopiranje uspesno

Page 26: uvod u programiranje predavanja 5

26

Рад са знаковним низовимаРад са знаковним низовима

strncpy(str_dest, str_src, n); /* копира n знакова */

#include <stdio.h>#include <string.h>main (){ char str1[]= "To be or not to be"; char str2[6]; strncpy (str2,str1,5); str2[5]='\0'; /* !! */ puts (str2);} To be

Page 27: uvod u programiranje predavanja 5

27

Рад са знаковним низовимаРад са знаковним низовима

strcat (str_dest, str_src); /* дописује стринг */

#include <string.h>main( ){ char str[80]; strcpy (str,"Stringovi "); strcat (str,"su "); strcat (str,"spojeni."); puts (str);} Stringovi su spojeni.

Page 28: uvod u programiranje predavanja 5

28

Рад са знаковним низовимаРад са знаковним низовима

strncat (str_dest, str_src, n); /* дописује n знакова */

main (){ char str1[20]; char str2[20]; strcpy (str1,"To be "); strcpy (str2,"or not to be"); strncat (str1, str2, 6); puts (str1);}To be or not

Page 29: uvod u programiranje predavanja 5

29

Рад са знаковним низовимаРад са знаковним низовима

strcmp (str1, str2); /* пореди два стринга */

main (){ char Resenje[] = "kruska"; char Odgovor[80]; do{ printf("Koje je moje omiljeno voce? "); gets (Odgovor); } while(strcmp (Resenje,Odgovor) != 0); printf ("Odgovor tacan!\n");}

Koje je moje omiljeno voce? jabuka

Koje je moje omiljeno voce? kruska

Odgovor tacan!

Page 30: uvod u programiranje predavanja 5

30

Рад са знаковним низовимаРад са знаковним низовимаstrchr (str1, c); /*тражи прву позицију карak. у стр.*/int main () /* враћа поинтер!!! */{ char str1[] = "Ovo je test recenica"; char * pch; printf ("Trazim karakter 'e' u\"%s\"\n",str1); pch=strchr(str1,'e'); while (pch!=NULL) { printf ("pronasao sam 'e' na poziciji

%d\n", pch-str1+1); pch=strchr(pch+1,'e'); }} pronasao sam 'e' na poziciji

6 9 14 16

Page 31: uvod u programiranje predavanja 5

31

Рад са знаковним низовимаРад са знаковним низовима

strstr (str1, str2); /* тражи поицију позицију стринга2 у стрингу1 */

int main ()

{

char str[ ] ="Ovo je jedan primer";

char * pch;

pch = strstr (str,"dan");

printf("Pronadjena pozicija je %d\n", pch-str+1);

}

Pronadjena pozicija je 10

Page 32: uvod u programiranje predavanja 5

32

Конверзија у нумеричке типове податакаКонверзија у нумеричке типове података

double  atof (string); /* конверзија у тип double */

main (){ double n,m; double pi=3.1415926535; char Ulaz[256]; printf ( "Unesite vrednost u stepenima: " ); gets ( Ulaz ); n = atof ( Ulaz ); m = sin (n*pi/180); printf ( "sin(%f) je %f\n" , n, m );}

Unesite vrednost u stepenima: 90

sin(90.000000) je 1.000000

Page 33: uvod u programiranje predavanja 5

33

Конверзија у нумеричке типове податакаКонверзија у нумеричке типове података

int  atoi (string); /* конверзија у тип int */

main (){ int i; char Ulaz[256]; printf ("Unesite broj: "); gets ( Ulaz ); i = atoi (Ulaz); printf ("Uneta vrednost je %d, a njena dvostruka vrednost je %d\n",i,i*2);

}

Page 34: uvod u programiranje predavanja 5

34

Конверзија у нумеричке типове податакаКонверзија у нумеричке типове података

long  atol (string); /*конверзија у тип long */ main (){ int i; char Ulaz[256]; printf ("Unesite broj: "); gets ( Ulaz ); i = atol (Ulaz); printf ("Uneta vrednost je %d, a njena dvostruka vrednost je %d\n",i,i*2);

}

Page 35: uvod u programiranje predavanja 5

35

функције за рад са стринговима:функције за рад са стринговима:

Пример: Учитати стринг и направити његову копију.

#include <stdio.h>

void strcopy ( char *s1, char *s2 ) { while ( *s2++ = *s1++ ); }

main(){ char original[100]=”Sarajevo”; char kopija[100]; strcopy(original, kopija); printf(”%s\n”, original); printf(”%s\n”, kopija);}

SarajevoSarajevo

Page 36: uvod u programiranje predavanja 5

36

Хвала на пажњи