Sunteți pe pagina 1din 29

Definitii. Functii specifice. Operatii.

Aplicatii

Siruri de caractere in
C++

Siruri de caractere in C+
+
Definitie.

Mod de declarare
Citirea unui sir de caractere
Afisarea unui sir de caractere
Functii specifice
Strlen
Strcpy, strncpy
Strcat, strncat
Strcmp, stricmp, strncmp,strnicmp

Aplicatii

Siruri de caractere in C++.


Definitie
Definitie 1: Un tablou unidimensional(vector) care are elemente definite de tip
char formeaza un sir de caractere.
Declarare:
char nume_sir[dimensiune];
Exemplu:
char s[10];
char vocale[6]=aeiou;
char s1[]=Test;
unde:
Sirul s poate memora maxim 9 caractere, are alocati 10 octeti, un caracter
este utilizat de caracterul NULL sau \0;
Sirul vocale memoreza 5 caractere, are alocati 6 octeti si este initializat cu
sirul vocalelor litere mici din alfabetul englez;
Sirul s1 poate memora maxim 4 caractere, dar are alocati 5 octeti.

Siruri de caractere in C++.


Definitie
Observatie: Daca din greseala se incearca sa se adauge caractere la un sir peste
lungimea maxima declarata atunci operatiile se pot executa eronat, sau pot influenta
valoarea altor variabile. Este recomandat ca dimensiunea declarata a unui sir de
caractere sa fie suficient de mare astfel incat sa se poata executa corect operatiile
dorite .
Definitii gresite:
char s1[];
char s2[0];
char s3[5]=informatica;
unde:
s1,s2 sunt doua siruri de caractere de lungime 0 (se aloca 0 octeti )
s3 poate memeora maxim 4 caractere dar se initializeza cu 11

Siruri de caractere in C++.


Definitie
Vizualizarea unui sir de caractere:
Exemplu 1: Fie declaratia char s[11]=INFORMATICA;
s:

\0

10

11

s-au alocat 11 caractere dar au fost utilizate 10


al 11-lea caracter este sfarsitul de sir \0, care se adauga automat
Exemplu 2: Fie urmatoarea declaratie char s1[15]=Proba scrisa;
s1

P
0

r
1

r
8

i
9

\0

10

11

12

13

14

au fost alocati 15 octeti


a fost memorat un sir de caractere de lungime 12
a fost adaugat automat la sfarsitul sirului marcatorul de sfarsit de sir \0
au ramas liberi 2 octeti

Siruri de caractere in C++.


Definitie

Concluzii:

. Pentru memorarea unui sir de caractere compilatorul retine doar adresa de inceput
primului caracter, adresa elementului din pozitia 0.

. Compilatorul adauga in mod automat dupa ultimul caracter din sir, caracterul Null \0

. Un sir de caractere este identificat in mod unic prin adresa de inceput a sirului si
rimul caracter \0 gasit printre octetii urmatori primului caracter.

Citirea unui sir de caractere


Varianta 1:
#include<iostream.h>
char s[100];
void main()
{ cout<<Dati sirul:;
cin>>s;
}
Explicatii: Daca de la tastatura se introduce textul:
Acesta este un sir de caractere
Se vor citi in ordine toate caracterele pana la intalnirea primului spatiu, dupa care
se va adauga \0. deci sirul s va contine tetul Acesta\0, lungimea sirului va fi 6 iar
in pozitia 6 in sir va fi caracterul \0 (s[6]=\0), restul octelilor alocati vor fi liberi.

Citirea unui sir de


caractere
Varianta 2:
#include<iostream.h>
char s[100];
void main()
{ cout<<Dati sirul:;
cin.get(s,100);
cin.get();
}
Explicatii:
Daca de la tastatura se introduce textul:
Acesta este un sir de caractere
si se da ENTER atunci sirul va prelua intreg sirul dat de la tastatura daca acesta
este mai mic de 100 de caractere. Tot ce depeseste 100 de caractere va fi ignorat.

Functia cin.get()
Forma generala:
Unde:

cin.get( sir_de_caractere ,int nr, char


c=\n )

sir_de_caractere =vectorul in care vor fi memorate caracterele citite


nr= numarul maxim de caractere care se va citi
char c=caracterul care determina oprirea citirii
Efect:
- se citesc de la tastatura un numar de maxim nr-1 caractere pana la
intalnirea caracterului ENTER
- se pot citi mai putin de nr-1 caractere
- daca sirul dat are o lungime mai mica de nr caractere si nu contine
caracterul c atunci se vor citi toate caracterele
- daca in primele nr caractere se gaseste caracterul c, atunci se vor citi
primele caractere pana la prima aparitie a caracterului c in sir, dar fara el;
- daca sirul dat de la tatstura este mai mare de nr caractere si nu contine
caracterul c atunci se vor citi doar primele nr-1 caractere
- se vor citi si caracterele albe: spatiu, tab
- se adauga automat la sfarsitul sirului caracterul \0
- ultimul parametru este optional, daca lipseste se considera ca este \n

Functia cin.get()
Forma generala:

cin.get()

Se poate utiliza si fara parametri, iar in acest caz va utiliza o zona intermediara de
memore numita buffer, pentru a elimina din sirul dat la intrare caracterele care nu
se doresc a fi citite.
Exemplu: fie urmatoarea secventa:
char s[50];
cin.get(s,50,*);
cin.get();
Daca de la tastatura se introduce textul :Examen*de*Bacalaureat efectul acestei
secvente va fi urmatorul:
- sirul s va contine sirul Examen, deci s-au citit caractere pana la prima
aparitie a caracterului * din text, restul, adica sirul *de*Bacalaureat se vor
sterge din buffer-ul de intrare.

Afisarea unui sir de


caractere
Varianta 1
Un sir de caractere poate fi afisat in ansamblul lui folosind comanda
cout dupa cum urmeaza:
cout<<sir_de_caractere;
Exemplu: fie urmatoarea secventa:
char s[50]=Acesta este un sir de caractere
cout<<s;
Pe ecran va fi afisat textul Acesta este un sir de caractere

Afisarea unui sir de


caractere
Varianta 2
Un sir de caractere poate fi afisat caratere cu caracter folosind
comanda cout dupa cum urmeaza:
for(i=0;s[i]!=NULL;i++)
cout<<s[i];
Exemplu: fie urmatoarea secventa:
char s[50]=INFORMATICA;
for(i=0;s[i]!=NULL;i++)
cout<<s[i]<<.;
Pe ecran va fi afisat textul I.N.F.O.R.M.A.T.I.C.A., dupa fiecare caracter din sir
va fi afisat caracterul punct.

Funcia strlen returneaz numrul de caractere a irului care ncepe la adresa s (primit ca parametru), fr a numra
int strlen (char *s)
caracterul \0.

Functii specifice
1.LUNGIMEA UNUI SIR DE CARACTERE

int strlen(char *s)


Functia STRLEN returneaza numarul de caractere a unui sir primit ca parametru,
incepand de la adresa primita, fara a numara marcatorul de sfarsit de sir \0
Exemplu:
char s[20]=INFORMATICA
cout<<strlen(s)<<endl;
cout<<strlen(s+0);
Va afisa: 11
11
cout<<strlen(s+3);
Va afisa : 8

s:

s:

\0

10

11

s+0
I

\0

10

11

s+3

Functii specifice
2.COPIEREA SIRURILOR DE CARACTERE
a.

char *strcpy(char *d, char *s)

Functia STRCPY copie peste sirul d(destinatie) sirul s(sursa), copierea se va


incheia atunci cand a terminat de copiat in d si marcatorul de sfarsit de sir \0 din s.
Functia va returna adresa de inceput a sirului d.
b.

char

*strncpy(char *d, char *s,


unsigned n)

Functia STRNCPY copie peste sirul d(destinatie) n caractere din sirul s(sursa),
copierea se va incheia aunci cand a terminat de copiat in d si marcatorul de sfarsit
de sir \0 din s. Functia va returna adresa de inceput a sirului d.
Observatie: daca valoarea lui n este mai mare decat sirul s, atunci vor fi copiate
toate caractele din s inclusiv \0.

Functii specifice
Exemplu 1 STRCPY:
#include<iostream.h>
#include<string.h>
void main()
{ char a[100]=crocodil,b[100]=hipopotam;
strcpy(a,b);
cout<<sirul a: <<a<<endl; //hipopotam
cout<<sirul b: <<b<<endl; //hipopotam
}
Exemplu 2 STRNCPY:
#include<iostream.h>
#include<string.h>
void main()
{ char a[100]=crocodil,b[100]=hipopotam;
strncpy(a,b,4);
cout<<sirul a: <<a<<endl; //hipo
cout<<sirul b: <<b<<endl; //hipopotam
}

Functii specifice
3.CONCATENAREA SIRURILOR DE CARACTERE
a.

char *strcat(char *d, char *s)

Concatenarea sirului s la d, presupune lipirea tuturor caracterelor sirului s la


sfarsitul sirului d. Functia STRCAT concateneaza la sirul d(destinatie) sirul
s(sursa), inclusiv marcatorul de sfarsit de sir \0 din s. Functia va returna adresa de
inceput a sirului d.
b.

char *strncat(char *d, char *s,


unsigned n)

Functia STRNCAT concateneaza primele n caractere din sirul s la sirul d. Daca sirul
s are mai putine caractere decat n, atunci se vor lipi toate caracterele sirului s la d,
inclusiv \0. Functia returneaza adresa de inceput a sirului d.

Functii specifice
Exemplu:
#include<iostream.h>
#include<string.h>
void main()
{ char a[100]=Vine_,b[100]=Bacalaureatul;
strcat(a,b);
cout<<sirul a: <<a<<endl; //Vine_Bacalaureatul
cout<<sirul b: <<b<<endl; //Bacalaureatul
}
Exemplu:
#include<iostream.h>
#include<string.h>
void main()
{ char a[100]=Vine_ ,b[100]=Bacalaureatul;
strncat(a,b,3);
cout<<sirul a: <<a<<endl; //Vine_Bac
cout<<sirul b: <<b<<endl; //Bacalaureatul
}

Functii specifice
4.COMPARAREA SIRURILOR DE CARACTERE
a.

int strcmp(char *s1, char *s2)

Functia STRCMP realizeaza compararea lexicografica, caracter cu caracter intre


cele doua siruri de caractere. Rezultatul functiei va fi un numar intreg dupa cum
urmeaza:
- negativ, daca s1 este mai mic decat s2;
- egal cu zero, daca s1 este egal cu s2;
- pozitiv, daca s1 este mai mare decat s2
b.

int stricmp(char *s1, char *s2)

Functia STRICMP are acelasi efect ca si functia STRCMP, doar ca nu se face


diferenta la comparare intre litere mari si litere mici.

Functii specifice
Exemplu:
#include<string.h>
#include<stdio.h>
void main()
{ char a[100]=MAMA,b[100]=ABRACADABRA;
int k=strcmp(a,b);
if (k>0)
cout<<a>b; //afiseaza a>b, se compara lexicografic sirurile
else
if (k==0)
cout<<a=b;
else
cout<<a<b;
}

Functii specifice
4.COMPARAREA SIRURILOR DE CARACTERE
c.

int strncmp(char *s1, char *s2)

Functia STRNCMP realizeaza compararea lexicografica, doar a primelor n caractere


dintre cele doua siruri de caractere.

d.

int strnicmp(char *s1, char *s2)

Functia STRNICMP are acelasi efect ca si functia STRNCMP, doar ca nu se face


diferenta la comparare intre litere mari si litere mici.

Functii specifice
5.INVERSAREA UNUI SIR DE CARACTERE

char *strrev(char *s)


Functia STRREV realizeaza inversarea caracterelor sirului s si returneaza adresa
sirului inversat.
6. DUPLICAREA UNUI SIR DE CARACTERE

char *strdup(char *s)


Functia STRDUP aloca in memorie spatiu pentru realizarea unei copii a lui s si
returneaza adresa gasita. Daca alocarea nu a reusit, reurneaza NULL.

Functii specifice
7. CAUTAREA UNUI CARACTER INTR-UN SIR DE CARACTERE
a.

char *strchr(char *s, char c)

Functia STRCHR cauta de la stanga la dreapta prima aparitie a caracterului c in


sirul s. In cazul in care caracterul c a fost gasit functia va returna adresa din sirul c
unde a fost gasit. Daca cautarea s-a incheiat fara succes, returneaza NULL.
b.

char *strrchr(char *s, char c)

Functia STRRCHR are acelasi efect ca si functia STRCHR dar cautarea se


realizeaza de la dreapta la stanga si returneaza adresa prima aparitie a
caracterului c in sirul s, daca il gaseste sau returneaza NULL in caz contrar.

Functii specifice
8. CAUTAREA UNUI SIR INTR-UN SIR DE CARACTERE

char *strstr(char *s1, char *s2)


Functia STRSTR cauta de la stanga la dreapta prima aparitie a sirului s2 in sirul
s1. In cazul in care sirul s2 a fost gasit in sirul s1 functia va returna adresa de
inceput din sirul s1 unde a fost gasit. Daca cautarea s-a incheiat fara succes,
returneaza NULL.
9. TRANSFORMAREA UNUI SIR DIN LITERE MARI IN MICI SI INVERS
a.

char *strupr(char *s1)

Functia STRUPR transforma toate literele mici din sirul s in litere mari. Functia va
returna un pointer la sirul s. Functia STRLWR are efectul invers functiei STRUPR.
b.

char *strlwr(char *s1)

Functii specifice
10. INLOCUIREA CARACTERLOR DINTR-UN SIR
a.

char *strset(char *s, char c)

Functia STRSET inlocuieste toate caracterele din sirul s cu caracterul c. Functia


returneaza un pointer la sirul s.
b.

char *strnset(char *s, char c)

Functia STRSET inlocuieste primele n caracterele din sirul s cu caracterul c. Functia


returneaza un pointer la sirul s.

Functii specifice
11. DESPARTIREA UNUI SIR IN SUBSIRURI

char *strtok(char *s, char *d)


Functia STRTOK este utilizat pentru a delimita unul sau mai multe subiruri din
irul s, n funcie de anumite caractere separator, memorate n irul d.
Primul apel al funciei strtok:
returneaz un pointer ctre primul caracter din primul subir al lui s care este
format doar din caractere consecutive ce nu aparin lui d.
plaseaz n irul s un caracter \0 imediat dup ultimul caracter al subirului gsit.
n cazul n care nu poate fi delimitat un subir cu proprietatea cerut, funcia
returneaz NULL.
Urmtoarele apeluri ale funcii strtok utiliznd NULL ca prim parametru
continu delimitarea unui subir, cutnd de la adresa imediat urmtoare
caracterului \0 plasat de apelul precedent.
funcia returneaz un pointer ctre adresa subirului astfel delimitat sau NULL dac
nu mai exist subiruri. Dup fiecare subir delimitat, funcia plaseaz \0.

Functii specifice
Forma generala de separare a unui ir s n subiruri, n funcie de anumite
caractere separator memorate n irul d:

# include <string.h>
void main ()
{
char s[200];
// irul care va fi desprit
char d[]=",. "; // irul care conine separatorii
char *p;
// pointer cruia i se va atribui adresa subirurilor
gsite
cin.get (s, 200);

p= strtok (s,d);
// primul apel
while (p)
{
cout << endl << p;
// prelucrarea subirurilor gsite
p=strtok (NULL, d); // apelurile 2, 3,
}
}

Functii specifice
12. CAUTAREA UNEI SECVENTE DE CARACTERE CONSECUTIVE
a.

int strspn(char *s, char *d)

Functia STRSPN returneaza numarul de caractere consecutive din s care apartin


lui d.
b.

int strcspn(char *s, char *d)

Functia STRCSPN returneza numarul de caractere consecutive din s care nu


apartin lui d.

Functii specifice
13. FUNCTII DE CONVERSIE A SIRURILOR DE CARACTERE
a.

int *atoi(char *s)

Functia ATOI convertete irul s n int i returneaz numrul rezultat. Conversia se


oprete la ntlnirea primului caracter nenumeric. n cazul n care irul nu ncepe cu
caractere numerice se va returna 0

b.

long *atol(char *s)

Functia ATOL convertete irul s n long i returneaz numrul rezultat. Conversia


se oprete la ntlnirea primului caracter nenumeric. n cazul n care irul nu ncepe
cu caractere numerice se va returna 0

Functii specifice
13. FUNCTII DE CONVERSIE A SIRURILOR DE CARACTERE
c.

float *atof(char *s)

Functia ATOF convertete irul s n float i returneaz numrul rezultat. Conversia


se oprete la ntlnirea primului caracter care nu este numr i diferit de .. n cazul
n care irul nu ncepe cu caractere numerice sau cu .se va returna 0.
d.

char *itoa(int nr, char *s, int baza)

e.

char *ltoa(long nr, char *s, int baza)

Functia ITOA convertete int ul nr n ir i l memoreaz n s. Pentru conversie se


va utiliza baza specificat de cel de-al 3-lea parametru. Funcia returneaz adresa
irului s.
Functia LTOA convertete long ul nr n ir i l memoreaz n s. Pentru conversie
se va utiliza baza specificat de cel de-al 3-lea parametru. Funcia returneaz
adresa irului s.