uvod u programiranje predavanja 5
DESCRIPTION
uvod u programoranjeTRANSCRIPT
Увод у програмски језик Увод у програмски језик CC
Знакови и низови знакова-стрингови
Електротехнички факултет у Источном Сарајеву
2
СадржајСадржај
Знакови (character)
•Кодирање знакова
•Константе
•Матрице знакова
•Улазно излазна конверзија
•Библиотечке функције за рад са знаковима
3
Знакови Знакови ((character)character)
• C има само нумеричке типове података.
• Потреба за рад са текстом.
• Постоји тип char– целобројан тип – предвиђен за представљање појединачних
карактера
• За представљање низа знакова (текстова) променљиве дужине, који се називају знаковни низови користи се низ типa char.
4
Кодирање знакова Кодирање знакова ((ASCIIASCII кôд)кôд)
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=#
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);
}
7
Константе типа знаковног низаКонстанте типа знаковног низа
• Најчешћи термин који се користи за знаковне низове је стринг
• Стринг је секвенца од нула или више знакова који се пишу у овиру ДВОСТРУКИХ знакова навода.
"John L. Johanson"
"Zdravo svima!"• Сваки стринг се завршава са тзв. нул знаком '\0' (null character) .
• Знаковни низ у општем случају не мора (али може) да садржи нул знак ('\0')
8
Стринг - низ знаковаСтринг - низ знакова
• 'A' представља један знак: А,
• "A" представља стринг тј. два знака: 'A' и '\0'
• Да би уписали у меморију 'А' потребна је једна меморијска јединица типа char
• За "А" потребно две меморијске јединице: једна за 'А' и једна за '\0'.
• стринг "Zdravo" представља 7 знакова: 'Z','d','r','a','v','o' и '\0'
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";
10
Симболичке констнатеСимболичке констнате
• #define ZVONO '\a'• #define NOVI_RED '\n'• #define VALUTA "US dollar"
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’
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
13
Матрице знаковаМатрице знакова
поље од 7 показивача, 7 меморијских локација истог типа али различите дужине!
char *daniB[7] ={"ponedeljak", "utorak", ... ,"nedelja"};
0
0
6
3
2
1A
...
...
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
15
Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије int getchar( void ); • Чита следећи знак, укључујући и беле знакове, са
стандардног улаза (тастатуре).
#include <stdio.h>main (){ char znak; printf ("Unesite tekst. Zavrsite sa tackom:"); do { znak=getchar(); printf("%c",znak); } while (znak != '.');}
16
Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије
putchar (int character ); • Исписује знак преко главног излаза (монитор).
#include <stdio.h>int main (){ char znak; for (znak = 'A' ; znak <= 'Z' ; znak++) { putchar (znak);
}}Излаз:ABCDEFGHIJKLMNOPQRSTUVWXYZ
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);}
18
Читање и писање знакова без конверзијеЧитање и писање знакова без конверзије
int puts (string ); • Исписује садржај знаковног низа string
до завршног знака \0 додајући знак за прелазак у нови ред \n иза последњег знака.
#include <stdio.h>int main (){ char string [ ] = "Hello world!"; puts (string);}
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
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
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
22
Функције за рад са стринговимаФункције за рад са стринговима
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); /* конвертује у велико
слово */
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);
}}
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
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
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.
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
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!
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
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
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
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);
}
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);
}
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
36
Хвала на пажњи