Sunteți pe pagina 1din 31

SIRURI DE

CARACTERE

Declararea i memorarea
sirurilor de caractere
Un sir de caractere:
- este un tablou unidimensional (vector) de caractere;
- reprezinta o succesiune de caractere cuprins ntre ghilimele si terminat cu
caracterul NULL notat \0;
-contine orice tip de caracter: litera mica, litera mare, cifra,
caracter special, delimitator, fiecare caracter fiind reprezentat prin codul
ASCII.
Datele care se reprezint sub form se iruri de caractere au o
larg aplicabilitate n programarea calculatoarelor, indiferent de limbajul
folosit. Astfel i n limbajul C se pot memora i prelucra informaii de tip
ir de caractere. Cu toate c limbajul c nu conine un tip de date special
pentru iruri de caractere aa cum are limbajul Pascal, se pot utiliza
tablouri unidimensionale de caractere.
Declararea unui tablou de caractere se face astfel:
char
nume_tablou[dimensiune_maxim];
Exemplu 1: char sir[20]; char t[10];

Exemplul 2:
char a[15]=calculator;
-se declara un sir de caractere n care vor putea
fi memorate maxim 14 caractere;
- sirul de caractere a a fost initializat la
declararea lui,daca se initializeaza sirul de
caractere, nu mai este nevoie sa se
precizeze lungimea maxima a sirului,
aceasta fiind calculata de catre compilator:
char a[]=calculator;

Prezentare generala
* Fiecare caracter din setul de caractere al limbajului C++ se
caracterizeaza printr-un cod unic, numit codul ASCII al
caracterului, un numar ntreg ntre 0 si 255.
n cadrul setului ASCII, codurile caracterelor sunt dupa cum
urmeaza:
- literele mari ncepnd cu 65 (A - 65, B - 66, ..., Z-90);
- literele mici ncepnd cu 97 (a 97, b 98, ..., z 122);
- cifrele ncepnd cu 48 ( 1 49, ..., 9 57).
*Observm c caracterul '0' nu are in codul ASCII valoarea
0, ci 48.
- caracterul spaiu este un caracter imprimabil. Spatiul are
in codul ASCII valoarea 32.

Citirea si scrierea sirurilor de caractere


Citirea sirurilor de caractere:
Citirea se face folosind instructiunea cin n
doua moduri:
-la nivel de caracter;
-la nivelul sirului de caractere.
Citirea la nivel de caracter (caracter cu
caracter) :
cout<<numarul de caractere:;
cin>>n;
for(i=0;i<n;i++)
cin>>sir[i];
sir[i]=NULL;
Citirea la nivelul irului de caractere:

Forma :
cin.get();
-folosita dupa o functie cin.get() cu
parametri pentru a descarca din fluxul de
date ultimul caracter citit, care ar mpiedica
efectuarea unei a doua operatii de citire de la
tastatura.
Exemplul:
char s[10];
cin.get(s,5);
//daca introducem textul informatica si tastam
Enter se memoreaza n variabila s sirul info;

Initializarea pointerilor
Initializarea unui sir se poate face in mai multe moduri:
1. Initializarea fiecarui element cu cate un caracter:
s[0] = 'A';
s[1] = 'B';
s[2] = 'C';
s[3] = '\0';
2. Sirurile se pot initializa la fel ca si caracterele:
char s[] = "abc";
sau echivalent
char s[] = {'a', 'b', 'c', '\0'};
3. Putem folosi si un pointer catre un sir constant, dar
interpretarea este diferita:
char *p = "abc";

Scrierea sirurilor de caractere


Scrierea se face folosind instructiunea cout n
doua moduri:
-la nivel de caracter;
-la nivelul sirului de caractere.
a.Scrierea la nivel de caracter (caracter cu
caracter)
cin>>sir;i=0;
while(sir[i]!=NULL)
{cout<<sir[i];
i++;}
b.Scrierea la nivelul sirului de caractere
cout<<sir;

Prelucrarea sirurilor de caractere


1. Funcia STRLEN-returneaza lungimea sirului
strlen(sir)
unde sir este o variabil de tip ir de caractere.

Exemplu:
char s[21];
int n;
cin>>s;
n=strlen(s);
cout<<n;

Dac se citete n variabila s irul informatica se afieaz valoarea 11.

2. Funcia STRCPY-Copiaza un ir de caractere n alt ir de


caractere.
strcpy(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

Exemplu:
char a[21],b[21];
cin>>a;
strcpy(b,a);
cout<<b;

Dac se citete n variabila a irul informatica se


afieaz irul informatica.

3. Funcia STRNCPY-Copiaza un numr de caractere specificat, dintr-un ir de caractere n alt ir de caractere.

strncpy(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere,
iar nr este o variabil de tip ntreg.
Exemplu:
char a[21],b[21];
cin>>a;
strncpy(b,a,4);
b[4]=NULL;
cout<<b;
Dac se citete n variabila a irul informatica se afieaz irul info.

4. Funcia STRCAT-concateneaz dou iruri de


caractere.
strcat(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de
caractere.

Exemplu:
char a[21],b[21];
cin>>a>>b;
strcat(a,b);
cout<<a;

5. Funcia STRNCAT-concateneaz dou iruri de


caractere.

strncat(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de
caractere, iar nr este o variabil de tip ntreg.

Exemplu:
char a[21],b[21];
cin>>a>>b;
strncat(a,b,3);
cout<<a;
Dac se citete n variabila a irul info i n variabila b

6. Funcia STRCMP-compar dou iruri de caractere.


strcmp(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de
caractere.
Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<strcmp(a,b);

Dac se citete n variabila a irul info i n variabila b


irul intro afieaz valoarea -1.

7. Funcia STRNCMP-compar un numr de caractere


specificat din dou iruri de caractere.
strncmp(sir1,sir2,nr)
unde sir1 i sir2 sunt dou variabile de tip ir de
caractere, iar nr este o variabil de tip ntreg.

Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<strncmp(a,b,3);
Dac se citete n variabila a irul info i n variabila b irul
intro afieaz valoarea -14.

8. Funcia STRICMP-Compar dou iruri de caractere fr a face


diferena ntre litere mici i
litere mari.

stricmp(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<stricmp(a,b);

Dac se citete n variabila a irul arena i n variabila b irul ARE


se afieaz valoarea 1.

9. Funcia STRSET-Iniializeaz un ir de caractere cu


acelai caracter;
strset(sir,ch)
unde sir este o variabil de tip ir de caractere, iar ch
este o variabil de tip caracter.
Exemplu:
char a[21],x;
cin>>a>>x;
strset(a,x);
cout<<a;
Dac se citete n variabila a irul info i n variabila x
caracterul 1 se afieaz irul 1111.

10. Funcia STRNSET-Iniializeaz ntr-un ir de caractere,


primele nr caractere, cu caracterul
ch.
strnset(sir,ch,nr)
unde sir este o variabil de tip ir de caractere, ch este o
variabil de tip caracter, iar nr este o variabil de tip ntreg.
Exemplu:
char a[21],x;
int n=2;
cin>>a>>x;
strnset(a,x,n);
cout<<a;
Dac se citete n variabila a irul info i n variabila x
caracterul 1 se afieaz irul 11fo.

11. Funcia STRLWRt-Transform literele mari n litere mici.

strlwr(sir)
unde sir este o variabil de tip ir de caractere.

Exemplu:
char a[21];
cin>>a;
strlwr(a);
cout<<a;

Dac se citete n variabila a irul iNFo se afieaz irul info.

12. Funcia STRUPR-Transform literele mici n litere


mari.

strupr(sir)
unde sir este o variabil de tip ir de caractere.

Exemplu:
char a[21];
cin>>a;
strupr(a);
cout<<a;

13. Funcia TOLOWER-Transform o liter mare n liter mic.


tolower(ch)
unde ch este o variabil de tip caracter.

Exemplu:
char c;
cin>>c;
c=tolower(c);
cout<<c;

Dac se citete n variabila c caracterul N se afieaz caracterul n.

14. Funcia TOUPPER-Transform o liter mic n liter mare.


toupper(ch)
unde ch este o variabil de tip caracter.

Exemplu:
char c;
cin>>c;
c=toupper(c);
cout<<c;

Dac se citete n variabila c caracterul b se afieaz caracterul B.

15. Funcia STRCHR-Caut prima apariie a ununi caracter ntr-un ir de


caractere.

strchr(sir,ch)
unde sir este o variabil de tip sir de caractere, iar ch este o variabil
de tip caracter.

Exemplu:
char a[21],c;
cin>>a>>c;
cout<<strchr(a,c);

Dac se citete n variabila a irul info i n variabila c caracterul f se


afieaz irul fo.

16. Funcia STRRCHR


Caut ultima apariie a ununi caracter ntr-un ir de caractere.
strrchr(sir,ch)
unde sir este o variabil de tip sir de caractere, iar ch este o
variabil de tip caracter.

Exemplu:
char a[21],c;
cin>>a>>c;
cout<<strrchr(a,c);

Dac se citete n variabila a irul informatica i n


variabila c caracterul i se afieaz irul ica.

17. Funcia STRSTR-Caut un subir ntr-un ir de caractere.


strstr(sir1,sir2)
unde sir1 i sir2 sunt dou variabile de tip ir de caractere.

Exemplu:
char a[21],b[21];
cin>>a>>b;
cout<<strstr(a,b);

Dac se citete n variabila a irul informatica i n variabila b irul


fo se afieaz irul formatica.

18. Funcia STRREV-Inverseaz ordinea caracterelor ntr-un ir de


caractere.

strrev(sir)
unde sir este o variabill de tip ir de caractere.

Exemplu:
char a[21];
cin>>a;
strrev(a);
cout<<a;

Dac se citete n variabila a irul info se afieaz irul ofni.

PROBLEME
1.Se citesc de la tastatur dou iruri s1 i s2. S se elimine
toate apariiile lui s2 n s1. irul s2 conine doar un
cuvnt.
Exemplu: s1=ana are mere,
s2=re; Se afiseaza: ana a me.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char s1[100],s2[30],p;
int l;
cout<<"introduceti textul:"; cin.get(s1,100);
cout<<"introduceti cuvantul:"; cin>>s2;
l=strlen(s2); p=strstr(s1,s2);
while(p!=0)
{strcpy(p,p+l);
p=strstr(s1,s2);}
cout<<s1;

2. Se citeste o propozitie cu maxim 200 de litere si spatii si apoi


o silaba formata din exact 2 litere.
Calculati si afisati numarul de aparitii ale silabei in propozitie.
Exemplu:p=ana are mere;
s=re;
Afiseaza: 2;
#include <iostream>
#include <cstring>
using namespace std;
int main()
{ char p[201],s[2];
int c=0;
cin.get(p,201);
cin>>s;
for(int i=0;i<strlen(p)-1;i++)
if(p[i]==s[0] && p[i+1]==s[1])
c++;
cout<<c;
return 0; }

3. Scrieti un program care citeste un sir de caractere si


transforma sirul in sir cu litere mici.
Exemplu: s=ANA
s devine ana
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[100];
int i=0;cin.getline(s,100);
while(s[i]!=0)
{
if( (s[i]>=65) && (s[i]<=90) )
s[i]=s[i]+32;i++;
}
cout<<s;return 0;}

4. Sa se verifice daca doua cuvinte citite de la tastatura rimeaza (spunem


ca doua cuvinte rimeaza daca ultimele doua caractere sunt identice):
Exemplu: s=tata;
t=roata
#include<iostream>
#in clude<cstring>
using namespace std;
int main()
{char s[30],t[30];
int i,j;
cin>>s;
cin>>t;
i=0;
while(s[i]!=0) i++;
j=0;
while(t[j]!=0) j++;
if( (s[i]==t[j]) && (s[i-1]==t[j-1]))
cout<<Rimeaza;
else cout<<Nu rimeaza;
return 0;}

Proiect realizat de:


-Popovici Bianca,
-Hudici Roberta.