Sunteți pe pagina 1din 19

http://www.cplusplus.

com/reference/cstring

SIRURI DE CARACTERE/ VECTORI DE CARACTERE

 Sirurile de caractere sunt de fapt tablouri de caractere, care au ca ultim element un


terminator de sir, caracterul null.
Exemplu:
char sc[5] = {’a’, ’b’, ’c’, ’d’, ’\0’}; // sir de caractere cu
elementele abcd sau tablou de caractere)

 In memoria interna, o constanta de acest tip este retinuta sub forma unui vector de
caractere.
 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).
 Limbajul C/C++ permite initializarea unui tablou de caractere printr-o constanta sir, care
include automat caracterul NULL sau \0
Exemplu :
char vect[11]=”calculator”; (O constanta de tip sir de caractere de declara intre doua caractere “ ”)

char vect[]=”calculator”; (compilatorul face calculul numarului de octeti


necesari)
char vect[100]=”calculator”; (s-au rezervat mai multi octeti decat era necesar)
Exemple de declaratii:

char tablouc*12+ = ,’c’, ’l’, ’a’, ’s’, ’a’,' ','a',' ','X','I','-','A'}; // tablou de caractere

char sirc*13+ = ,’c’, ’l’, ’a’, ’s’, ’a’,' ','a',' ','X','I','-','A','\0'}; // sirul de caractere : clasa a XI-a

char sc*5+ = ”clasa a XI-a”; //echivalent cu sirul sc

char sc [ + = ”clasa a XI-a”; //echivalent cu sirul sc

char sc *5+ = ”clasa a XI-a”;

char sir[50];

Afisari si atribuiri:

cout<<sirc<<"\n"; //afiseaza clasa a XI-a

cout<<tablouc<<"\n"; //eroare: tabloul de caractere poate fi afisat ca sir

cout<<s<<endln; // eroare: tablou neinitializat

cout<<sc [0]; // afiseaza primul caracter din sirul sc - c

cout<<sc [4]; // afiseaza al patrulea caracter din sirul sc – a

sc *0+=’p’; // elementului din sir de indice 0 i se atribuie valoarea ‘p’;


cout<<sc<<endln; // se afiseaza : plasa a XI-a

sc [4]='C';
cout<<sc<<endln; // se afiseaza plaCa a XI-a
Citirea si afisarea
Sirurile de caractere pot fi initializate inca de la declarare sau citite pe parcursul programului.

1. Citirea unui sir de caractere se poate face ca citirea oricarui tablou, intr-un FOR, caracter cu
caracter. Aceasta varianta nu este recomandata. In acest caz, terminatorul de sir '\0' nu este
memorat automat, el trebuie pus explicit dupa ultimul caracter din sir.
Exemplu:
char sir[20];
for(int i=0;i<=5;i++)
cin>>sir[i];
cout<<sir<<endl; /*se va afisa sirul format din cele 6 caractere, urmat de caractere „reziduale”,
initializate implicit la compilare, din cauza ca n-a fost pus terminatorul de sir*/
sir[6]=0; //introducem terminatorul de sir
cout<<sir<<endl; //sirul va fi afisat corect

2. Se poate face folosind cin>> . 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.
De exemplu, daca se sirul este “clasa a XI-a”, variabila sir va retine numai “clasa”.

Exemplu:
char sir[30];
cin>>sir;
cout<<sir;
3. Se poate folosi o functie speciala cin.get() pentru citirea sirurilor de caractere, inclusa in
biblioteca string.h.

char sir[20], c_end;

int nrcaractere;
cin.get(sir, nrcaractere, c_end);

Functia cin.get citeste un sir de caractere pana cand au fost citite nrcaractere-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.

Exemple:
char sir[30]="informatica";
cin.get(sir,5,’?’); //variabila sir va retine “info”
cin.get(sir,15,’*’); //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,4,’c’); //variabila a va retine “inf”
cin.get(sir,15); //variabila a va retine “informatica”
Funcţii care lucrează cu șiruri de caractere (#include<string.h>)

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

Forma generală : strlen(nume sir);

Exemplu: Se citește un şir de caractere şi se afișează numărul de caractere a șirului


2 Functia de copiere a unui sir.

Forma generală: strcpy(destinatie,sursa)


Funcția are rolul de a copia (inlocuieste ) șirul de la adresa sursa la adresa destinație.

3. Functia de concatenare ( adaugare)


Forma generală: strcat (destinație, sursă)
Funcţia are rolul de a adăuga șirului de la adresa destinație șirul de la adresa sursă.
4. Functia de adaugare a primelor n caractere din al doilea sir
Forma generală: strncat (destinație, sursă, n)
Funcția adaugă șirului destinație primii n octeți ai șirului sursă
5. Functia de cautare a unui character
Forma generală: strchr (nume şir, 'caracter' )
Functia căută în șirul nume şir caracterul caracter şi returnează subșirul care începe cu prima
apariție a caracterului citit
6. Functia care returnează adresa ultimei apariții a caracterului căutat
strrchr (şir, 'caracter' )
7. Functia de comparare a doua siruri

Forma generală strcmp (sir1, sir2 )


Funcția are rolul de a compara 2 șiruri de caractere şi va returna valoarea:
< 0 dacă sir1<sir2
= 0 dacă sir1=sir2
> 0 dacă sir1>sir2

Exemplu Se compară șirul a cu șirul b şi se listează relația dintre cele 2 șiruri astfel:
- dacă primele n caractere sunt identice se compară caracterele n+1
- dacă caracterul n+1 al șirului a este situat alfabetic înaintea caracterului n+1 al șirului b se afișează
a<b
- dacă caracterul n+1 al șirului a este situat alfabetic după caracterul n+1 al șirului b se afișează a>b
- dacă primul caracter al șirului a este situat alfabetic înaintea primului caracter al șirului b se
afișează a<b indiferent de lungimea celor 2 șiruri
- dacă primul caracter al șirului a este situat alfabetic după primul caracter al șirului b se
afișează a>b indiferent de lungimea celor 2 șiruri
8. Functiile strlwr ş i struwr
strlwr(s1) - convertește toate literele șirului s1 în litere mici strupr(s2) -
convertește toate literele șirului s2 în litere mari
9. Funcția care identifică dacă șirul sir2 este subșir al șirului sir1

Forma generală: strstr (sir1, sir2)


1. Se citeşte
de la tastatură un cuvânt. Să se afişeze numărul iniţial de caractere ale cuvântului şi apoi să se
şteargă toate vocalele din cuvânt.
2. Se citesc de la tastatură 2 şiruri de caractere. Să se verifice dacă sunt egale (la fel) fără a se face deosebire
între literele mari şi literele mici.
10. Functia strcspn ()
Forma generală: strcspn(s1,s2)
Funcția returnează numărul caracterelor din șirul s1 care nu se găsesc în șirul s2

#include <iostream>
#include<string.h>
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=strcspn(s1,s2); //returneaza numarul caracterelor din s1 si nu sunt in s2
cout<<a;
return 0;
}
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 <iostream>
#include<string.h>
#include <stdio.h>
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;
}

12. FUNCTII UTILIZATE PENTRU CONVERSIA VALORILOR NUMERICE în SIR


La utilizarea acestor funcții se introduce directiva #include<stdlib.h>
a) Funcția atof - convertește un şir către tipul double
b) Funcția atold - convertește un şir către tipul long double
#include <stdlib.h>
#include <iostream >
void main()
{
float f;
char *str = "12345.67"; f = atof(str);
cout<<"string = "<<str<<endl<<"float = "<< f;
}

c) Funcția atoi - convertește un şir către tipul int


d) Funcția atol - convertește un şir către tipul long
Exemplu
#include <stdlib.h>
#include <iostream>
void main()
{
int n;
char *str = "12345.67"; n = atoi(str);
cout<<"string = "<<str<<endl<<"float = "<< n;
}

e) Funcția ecvt - convertește o valoare double către un sir


f) Funcția itoa - convertește o valoare de tip int către un sir
g) Funcția ltoa - convertește o valoare de tip long int către un sir

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