Sunteți pe pagina 1din 5

LECTIA 1

Siruri de caractere
Un sir de caractere este o succesiune de caractere memorata intr-un tablou
unidimensional de tip char. Fiecare octet al tabloului memoreaza codul
ASCII al caracterului respective. Sfarsitul sirului este marcat prin caracterul
NULL sau 0.
1. Declararea si memorarea vectorilor de caractere
Char cuvant[15];

2. Initializarea sirurilor de caractere


Char cuvant[ ]=programator;
Sau
Char cuvant[15]=programator;

3. Citirea si afisarea sirurilor de caractere


# include <iostream.h>
# include <conio.h>
void main()
{char cuvant[15];
cout<<cititi cuvantul:;cin>>cuvant;
cout<<cuvantul citit:;cout<<cuvant;
}
cuvant[0]=p, cuvant[1]=r e.t.c
OBS.
Cu ajutorul functiei cinnu putem citi siruri de caractere care contin spatii sau alte
caractere albe.
Pentru citirea sirurilor de caractere care contin cuvinte separate prin spatii sau
caractere albe vom folosi functia cin.get.
# include <iostream.h>
# include <conio.h>
void main()
{char sir[50];
cin.get(sir,40); //citeste max.40 de caractere sau se termina la <enter>
cout<<sir;
}
OBS.
In cazul citirii a doua siruri de caractere, in buffer-ul de citire se depune dupa
citirea primului sir, caracterul \n, datorita faptului ca s-a tastat <enter>. Citirea
celui de-al doilea sir se opreste pentru ca se preia \n din buffer.
Apeland functia cin.get() aceasta va prelua caracterul \n astfel eliminam acest
inconvenient, iar al doilea sir se va citi in mod normal.
# include <iostream.h>
# include <conio.h>
void main()
{char sir1[50],sir2[50];
cin.get(sir1,40);
cout<<sir1;

cin.get();
cin.get(sir2,40);
cout<<sir2;
}

4. Functii care opereaza cu siruri de caractere


a) Determinarea lungimii unui sir de caractere
Cout<<strlen(sir);
b) Copierea unui sir intr-un alt sir
Strcpy(sir1,sir2);
Cout<<sir1;
c) Concatenarea a doua siruri
Strcat(sir1,sir2);
Cout<<sir1;
Strncat(sir1,sir2,3); //concateneaza 3 caractere din sir2 la sir1
Cout<<sir1;
d) Compararea a doua siruri
K=strcmp(sir1,sir2)
If (k<0) cout<<sir1<sir2
If (k>0) cout<<sir1>sir2;
If (k==0) cout<<sir1=sir2;
K=stricmp(sir1,sir2);//are acelasi rol cu strcmp cu diferenta ca nu
face distinctie intre literele mari si mici.
e) Cautarea unui character intr-un sir
Cout<<strchr(sir,character); //intoarce subsirul care incepe cu prima
aparitie a caracterului citit de la
dreapta la stanga
*t=strchr(sir,character)
cout<<t-sir; //intoarce indicele primei aparitii a unui
character intr-un sir
Cout<<strrchr(sir,character); //intoarce subsirul care incepe cu prima
aparitie a caracterului citit
f) Cautarea unui subsir intr-un sir
*t=strstr(sir,subsir); // cauta prima aparitie a subsirului , de la stanga
la dreapta ; functia returneaza adresa elementului din sir , unde incepe
subsirul.
cout<<t-sir; //pozitia subsirului in sir
g) Separarea entitatilor
*p=strtok(sir,separator)
determina prima entitate
*p= strtok(NULL,separator) determina urmatoarele entitati
Cauta in sir un sir care este separat de delimitatorii definiti prin separator
Aplicatii siruri de caractere
1. Se citeste de la tastatura un sir de cel mult 30 de caractere si creeaza fisierul text
BAC.TXT ce contine sirul de caractere dat si toate prefixele acestuia de lungime
cel putin 1, fiecare pe cate o linie, in ordinea descrescatoare a lungimii prefixelor.

(problema nr 3 pag.10 ghid bacalaureat)


Exemplu:
Proba
Prob
Pro
Pr
P
Rezolvare
N=strlen(s);
For (k=1;k<=n;k++)
{for (i=0;i<n-k+1;i++)
f<<s[i];
f<<endl;
}
2. Se citeste de la tastatura un sir de cel mult 30 de caractere si creeaza fisierul text
BAC.TXT ce contine sirul de caractere dat si toate sufixele acestuia de lungime
cel putin 1, fiecare pe cate o linie, in ordinea crescatoare a lungimii sufixelor.
(problema nr 3 pag.16 ghid bacalaureat)
Exemplu:
E
Te
Ste
Este
Teste
Rezolvare
N=strlen(s);
For (k=1;k<=n;k++)
{for )i=n-k;i<n;i++)
f<<s[i];
f<<endl;
}
3. Se citeste de la tastatura un sir de cel mult 30 de caractere si un character c; sa se
dubleze fiecare aparitie c caracrerului c in sir sis a se afiseze.
(problema nr 3 pag.33 ghid bacalaureat)
Exemplu:
Alfabetar
Aalfaabetaar
Rezolvare
For (i=0;i<strlen(s);i++)
{f<<s[i];
if (s[i]==c)
f<<s[i];}
Test
1. Initializand sirul de caractere astfel:
Char sir[]=autor;

Cati octeti contine zona de memorie alocata?


a) 5 b) 6 c) 4
2. Initializand sirul de caractere astfel:
char sir[20]=autor;
Cati octeti contine zona de memorie alocata?
a) 21 b) 20 c) 5
3. Ce va afisa urmatoarea secventa de program daca la citire se introduce
textul:calculatorul meu este performant?
char sir[16];
cin>>sir;
cout<<sir;
a) calculatorul meu este performant
b) calculatorul
c) calculatorul meu
4. Ce va afisa urmatoarea secventa de program daca la citire se introduce textul:
calculatorul meu este performant?
char sir[50];
cin.get(sir,17);
cout<<sir;
a) calculatorul meu este performant
b) calculatorul
c) calculatorul meu
5. Ce va afisa secventa de mai jos?
Char sir1[]=floare-,sir2[]=gradinarit;
Strncat(sir1,sir2,7);
Cout<<sir1;
a) floare-gradinarit b) floare-gradinar
c) floare-gradina

Tema
Se citeste un text. Sa se afiseze cuvintele din text care contin cel putin 3 vocale.
Cin.get(v,201);
Cin.get();
N=strlen(v);
I=0;
Repeat
J=0;k=0;
Repeat
A[j]=v[i]
Daca (a[j]=a || a[j]=e-----K++;
I++;j++
Cat timp (v[i-1]!=
A[j]=0
Daca k<=3 atunci

Scrie a
Cat timp i<n
Probleme propuse
1) Sa se insereze pe pozitia p a unui sir un alt sir dat.
2) Sa se steargea dintr-un sir dat n caractere, incepand cu pozitia p
3) Se citeste un text care contine cuvinte separate prin spatii. Sa se elimine spatiile
din text.
4) Numarati aparitiile fiecarei litere intr-un text .
5) Numarati aparitiile unui cuvant intr-un text.
1.

S-ar putea să vă placă și