ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf ·...

31
Sirurile de caractere sunt de fapt tablouri unidimensionale (sau vectori) ce memoreaza valori de tip caracter , au ca ultim element un terminator de sir, caracterul null ( ‘ \0 ’ ) Fiecare litera ocupa un octet Se declara char sir[50]; // se aloca spatiu de memorie de maxim 50 caractere ȘIRURI DE CARACTERE/ VECTORI DE CARACTERE char sir[11]=”calculator”; // (O constanta de tip sir de caractere de declara intre doua caractere “ ”) char sir[ ]=”calculator”; // (compilatorul face calculul numarului de octeti necesari) char sir[100]=”calculator”; // (s-au rezervat mai multi octeti decat era necesar) char sir[5] = {’a’, ’b’, ’c’, ’d’, ’\0’}; // sir de caractere cu elementele abcd sau tablou de caractere) char v [13] ={ ‘c’, ’l’, ’a’, ’s’, ’a’,' ','a',' ','X','I','-',‘a'}; // tablou de caractere initializat cu valoarea : clasa a XI-a char t[13] = {’c’, ’l’, ’a’, ’s’, ’a’,' ','a',' ','X','I','-',‘a','\0'}; // sirul de caractere : clasa a XI-a char sir[13] = ”clasa a XI-a”; //echivalent cu sirul v si t char sir [ ] = ”clasa a XI-a”; //echivalent cu sirul v si t Un şir de caractere poate fi iniţializat la declarare astfel: c l a s a a x I - a \0 1 2 3 4 5 6 7 8 9 10 11 12 13 sir

Transcript of ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf ·...

Page 1: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

• Sirurile de caractere sunt de fapt tablouri unidimensionale (sau vectori) ce memoreaza valori de tip caracter, • au ca ultim element un terminator de sir, caracterul null ( ‘ \0 ’ )• Fiecare litera ocupa un octet

• Se declara char sir[50]; // se aloca spatiu de memorie de maxim 50 caractere

ȘIRURI DE CARACTERE/ VECTORI DE CARACTERE

char sir[11]=”calculator”; // (O constanta de tip sir de caractere de declara intre doua caractere “ ”)

char sir[ ]=”calculator”; // (compilatorul face calculul numarului de octeti necesari)

char sir[100]=”calculator”; // (s-au rezervat mai multi octeti decat era necesar)

char sir[5] = {’a’, ’b’, ’c’, ’d’, ’\0’}; // sir de caractere cu elementele abcd sau tablou de caractere)

char v [13] ={ ‘c’, ’l’, ’a’, ’s’, ’a’,' ','a',' ','X','I','-',‘a'}; // tablou de caractere initializat cu valoarea : clasa a XI-a

char t[13] = {’c’, ’l’, ’a’, ’s’, ’a’,' ','a',' ','X','I','-',‘a','\0'}; // sirul de caractere : clasa a XI-a

char sir[13] = ”clasa a XI-a”; //echivalent cu sirul v si t

char sir [ ] = ”clasa a XI-a”; //echivalent cu sirul v si t

Un şir de caractere poate fi iniţializat la declarare astfel:

c l a s a a x I - a \0

1 2 3 4 5 6 7 8 9 10 11 12 13

sir

Page 2: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

• Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului pe care il memoreaza.

• Conventia este ca ultimul octet sa retina 0 (codul caracterului nul).

• Caracterul nul este memorat automat.

• Trebuie rezervate lungimea_sirului+1 caractere char (+1 pentru caracterul nul).

Page 3: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 4: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Se memoreaza de 5 ori cate un caracter

Page 5: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

2. Se poate memora un sir folosind cin>> nume_sir

Caracterul nul este adaugat automat.

Dezavantajul este ca in acest fel nu se pot citi siruri care contin mai multe cuvinte separate prin spatii.

Citirea sirului se sfarseste la intalnirea primului caracter blank.

daca se memoreaza sirul initializat “ora de

informatica”, variabila sir va retine numai “clasa”.

Page 6: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Pentru citirea paragrafelor avem functia cin.get() , inclusa in biblioteca string.h.

#include <string.h>int main(){char sir[20], c_end; int nrchar;

cin.get(sir, nrchar, c_end);cin.get();cout<<sir;}

Functia cin.get citeste un sir de caractere pana cand au fost citite nrchar-1 caractere sau pana s-a intalnit caracterul c_end. Parametrul c_end poate lipsi. Implicit acesta este ’\n’ (new line).Pot fi citite si caracterele albe, caracterul nul este inserat automat iar caracterul transmis ca ultim parametru nu este

inserat in sir.

3. Se poate folosi o functie speciala cin.get()

Page 7: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Exemple:

char sir[20]="informatica în C++";

cin.get(sir,5,’r’); //variabila sir va retine “info”

cin.get(sir,17,’ ’); //variabila sir va retine “informatica”

cin.get(sir, 15 , ’o’); //variabila sir va retine “inf” deoarece s-a intalnit caracterul 'o' pe a patra pozitie in sir

cin.get(sir,15); //variabila a va retine “informatica”

i n f o r m a t i c a î n C + +

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20Sir[20]

Page 8: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

OBS: daca se citesc mai multe siruri, trebuie sa punem functia cin.get(); dupa fiecare memorare sir

Page 9: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Codul ASCII pentru caractereCodul ASCII

pentru literelemari si mici

Caractereleconvertite in numeric iau

valori de la 65 pana la 122

Page 10: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 11: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 12: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Sa se afiseze media elevului daca se cunosc doua note

Page 13: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

1 Functia strlen( ) Are rolul de a returna lungimea unui şir(fără a lua în considerare caracterul nul).

1. Forma generală : strlen(nume sir);2. Exemplu: Se citește un şir de caractere şi se afișează numărul de caractere a șirului

Principalele funcții de prelucrare a șirurilor de caractere (#include<cstring>)

1. Tema : deschideti http://www.cplusplus.com/reference/ si cautati in bibioteca CSTRING care sunt functiile si cereturneaza acestea (ce exemple sunt)?

Page 14: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Se citeste o fraza si o silaba din doua litere. Sa se afiseze de cate ori apare silaba in text

Page 15: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 16: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Stergerea unei litere

a d n a

0 1 2 3 4 .. 99

s

a d i n a

0 1 2 3 4 ..

99

s

n a

0 1 2 3 4 .. 99

t

X=2

Page 17: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Sirul “sursa” se adauga la sirul str

Page 18: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

Functia PUTS() de afisare in biblioteca STDIO.H

Page 19: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 20: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

echivalent cu printf din biblioteca STDIO.H

printf ("found at %d\n",pch-str+1);

Se declara un pointer * pch pentru a afla pozitia in vectorul de char

Page 21: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 22: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 23: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 24: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 25: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 26: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 27: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 28: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 29: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului

11. Functia spn ( ) Forma generală: strspn(s1,s2)Funcția returnează numărul caracterelor din șirul s1 care se găsesc în șirul s2

#include#include#include

using namespace std; int main(){ int a;

char s1[100],s2[100]; cout<<"tasteaza o fraza: "; cin.get(s1,100); cin.get(); cout<<"tasteaza o fraza: "; cin.get(s2,100);cin.get();a=strspn(s1,s2);

cout<<a;return 0;}

Page 30: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului
Page 31: ȘIRURI DE CARACTERE/ VECTORI DE CARACTEREinformatik.ddbuftea.ro/lectie siruri de char.pdf · •Fiecare componenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului