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: I N F O R M A T I C A \0
0 1 2 3 4 5 6 7 8 9 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 r o b a s c r i s a \0
0 1 2 3 4 5 6 7 8 9 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: cin.get( sir_de_caractere ,int nr, char
c=‘\n’ )
Unde:
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.
Funcţia strlen returnează numărul de caractere a şirului care începe la adresa s (primită ca parametru), fără a număra
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”
s: I N F O R M A T I C A \0
cout<<strlen(s)<<endl;
0 1 2 3 4 5 6 7 8 9 10 11
cout<<strlen(s+0);
Va afisa: 11
11 s+0

cout<<strlen(s+3); s: I N F O R M A T I C A \0
Va afisa : 8 0 1 2 3 4 5 6 7 8 9 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 subşiruri din
şirul s, în funcţie de anumite caractere separator, memorate în şirul d.
Primul apel al funcţiei strtok:

• returnează un pointer către primul caracter din primul subşir al lui s care este
format doar din caractere consecutive ce nu aparţin lui d.
• plasează în şirul s un caracter ‘\0’ imediat după ultimul caracter al subşirului găsit.
În cazul în care nu poate fi delimitat un subşir cu proprietatea cerută, funcţia
returnează NULL.
Următoarele apeluri ale funcţii strtok utilizând NULL ca prim parametru

• continuă delimitarea unui subşir, căutând de la adresa imediat următoare


caracterului “\0” plasat de apelul precedent.
•funcţia returnează un pointer către adresa subşirului astfel delimitat sau NULL dacă
nu mai există subşiruri. După fiecare subşir delimitat, funcţia plasează “\0”.
Functii specifice
Forma generala de separare a unui şir s în subşiruri, în funcţie de anumite
caractere separator memorate în şirul d:

# include <string.h>
void main ()
{
char s[200]; // şirul care va fi despărţit
char d[]=",. "; // şirul care conţine separatorii
char *p; // pointer căruia i se va atribui adresa subşirurilor
găsite
cin.get (s, 200);
p= strtok (s,d); // primul apel
while (p)
{
cout << endl << p; // prelucrarea subşirurilor găsite
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 converteşte şirul s în int şi returnează numărul rezultat. Conversia se


opreşte la întâlnirea primului caracter nenumeric. În cazul în care şirul nu începe cu
caractere numerice se va returna 0

b. long *atol(char *s)

Functia ATOL converteşte şirul s în long şi returnează numărul rezultat. Conversia


se opreşte la întâlnirea 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 converteşte şirul s în float şi returnează numărul rezultat. Conversia


se opreşte la întâlnirea primului caracter care nu este număr ş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 converteşte int – ul nr în şir şi îl memorează în s. Pentru conversie se
va utiliza baza specificată de cel de-al 3-lea parametru. Funcţia returnează adresa
şirului s.
Functia LTOA converteşte long – ul nr în şir şi îl memorează în s. Pentru conversie
se va utiliza baza specificată de cel de-al 3-lea parametru. Funcţia returnează
adresa şirului s.

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