Documente Academic
Documente Profesional
Documente Cultură
Temă proiect:
Șiruri de caractere
Îndrumător: Autor:
Prof. FANASE ALIN Grecu Cristian
Clasa: a XII-a A
Mai 2022
CUPRINS:
I. INTRODUCERE…………………………………………...1
II. DECLARAREA UNUI ȘIR DE
CARACTERE……………………………………………...2
III. AFIȘAREA UNUI ȘIR DE
CARACTERE……………………………………………...3
IV. REFERIREA UNUI CARACTER DIN ȘIR. PARCURGEREA
UNUI ȘIR DE
CARACTERE……………………………………………...5
V. TIPUL CHAR *. LEGĂTURA DINTRE POINTER-I ȘI
TABLOURI…………………………………………….......7
VI. FUNCȚII PENTRU
CARACTERE……………………………………………...9
VII. FUNCȚII PENTRU ȘIRURI DE
CARACTERE……………………………………………...11
I.Introducere.
char s[11];
S-a declarat un șir care poate memora maxim 11 caractere, cu indici 0 1 ... 10.
Șirul s poate memora cel mult 10 caractere utile, după ultimul caracter util fiind memo-
rat caracterul '\0'.
cin >> s;
În acest mod, datorită specificului operatorului >> nu se pot citi șiruri care conțin spații – se
vor citi caracterele până la primul spațiu, fără acesta.
Pentru a citi șiruri care conțin spații, putem folosi metoda getline a obiectului cin sau alt
obiect de tip istream:
Se vor citi în șirul s caracterele din stream-ul de intrare (de la tastatură) până la apariția car-
acterului sfârșit de linie '\n', dar nu mai mult de n-1 caractere. Caracterul '\n' nu va fi
adăugat la șirul s, dar va fi extras din stream. De exemplu:
cin.getline(s , 11);
Am putea spune că getline citește toată linia și sare peste ENTER. Iată un exemplu com-
plet:
#include <iostream>
using namespace std;
int main(){
char nume1[31], nume2[31];
cout << "Cum te cheama? (nume, prenume) ";
cin.getline(nume1, 31);
cout << "Cum il cheama pe prietenule tau? ";
cin.getline(nume2 , 31);
cout << "Te numesti " << nume1 << endl;
cout << "Esti prieten cu " << nume2 << endl;
return 0;
}
O altă modalitate de citire a unui șir care poate conține spații este folosirea metodei get a
obiectului istream, pe care nu o mai prezentăm aici.
IV.Referirea unui caracter din șir.
Parcurgerea unui șir de caractere.
Deoarece șirurile de caractere sunt de fapt tablouri, pentru referirea unui caracter din șir se
folosește operatorul [], ca în exemplul următor:
char s[]="abac"; // sirul consta din 5 caractere: cele 4 litere si caracterul nul '\
0'
cout << s[3]; // c
s[1] = 'r';
cout << s; // arac
cout << s[10]; // ??? comportament impredictibil: nu exista in sir caracter cu indice
10
În numeroase situații este necesară analizarea fiecărui caracter din șir. Pentru aceasta este
necesară o parcurgere a șirului; aceasta se face similar cu parcurgerea unui tablou oare-
care. Diferența constă în faptul că, pentru șirul de caractere nu se cunoaște explicit
lungimea. Ea poate fi determinată cu funcția strlen (vezi mai jos), dar putem controla par-
curgerea șirului știind că după ultimul caracter valid din șir apare caracterul nul '\0'.
char s[11];
cin >> s; // se citeste un cuvant , fara spatii
int i = 0;
while(s[i] != '\0')
{
cout << s[i] << " ";
i ++;
}
char s[11];
cin >> s; // se citeste un cuvant , fara spatii
for(int i = 0 ; s[i] ; i ++)
cout << s[i] << " ";
V.Tipul char *.
Legătura dintre pointer-i și tablouri
Considerăm declarația:
Ce este p? Este un pointer la char, adică o variabilă a cărei valoare este adresa unei date
de tip char. Întrebarea este a cărei date? În acest moment a niciuneia, deoarece vari-
abila p nu a fost inițializată, iar valoare ei este o adresă aleatorie. Șansele ca ea să reprez-
inte adresa unei date de tip char din spațiul de memorie al programului nostru sunt la fel de
mici ca șansele ca valoarea inițială a unei variabile de tip int să fie în intervalul 1 ... 100.
Ce este s? Spunem că este un șir de caractere, dar practic s este tot un pointer. Valoarea
sa este adresa primului element din șir, adică adresa lui s[0]. Observăm că de fapt, vari-
abilele p și s sunt de același tip, pointer la char. Diferența dintre cele două variabile este
că s memorează o adresa de memorie unde începe un șir de caractere (la acea adresă ex-
istă o dată de tip char ) în timp ce p memorează o adresă aleatorie.
Cu ce putem inițializa pointer-ul p? Cu adresa unei date de tip char. O asemenea dată este
orice element al unui șir de caractere, de exemplu orice element din s. Dacă p reprezinta
adresa unui caracter dintr-un șir, atunci cu p se pot face toate operațiile care se pot face cu
acel șir.
Iată un exemplu:
#include <iostream>
int main(){
char * p , s[]="pbinfo";
cout << s << endl; // pbinfo
p = s;
cout << p << endl; // pbinfo
p ++;
cout << p << endl; // binfo
return 0;
}
VI.Funcții pentru caractere.
isalnum
Verifică dacă un caracter este alfanumeric (cifră, literă mare, literă mică). Returnează o val-
oare diferită de zero dacă parametrul este alfanumeric, 0 în caz contrar.
isalpha
Verifică dacă un caracter este alfabetic (literă mare, literă mică). Returnează o valoare difer-
ită de zero dacă parametrul este alfabetic, 0 în caz contrar.
islower
Verifică dacă un caracter este literă mică. Returnează o valoare diferită de zero dacă
parametrul este literă mică, 0 în caz contrar.
isupper
Verifică dacă un caracter este literă mare. Returnează o valoare diferită de zero dacă
parametrul este literă mare, 0 în caz contrar.
isdigit
Verifică dacă un caracter este cifră. Returnează o valoare diferită de zero dacă parametrul
este cifră, 0 în caz contrar.
tolower
Convertește parametrul la literă mică. Dacă parametrul este literă mare, returnează val-
oarea convertită, în caz contrar returnează valoarea inițială a parametrului.
toupper
Convertește parametrul la literă mare. Dacă parametrul este literă mică, returnează val-
oarea convertită, în caz contrar returnează valoarea inițială a parametrului.
VII.Funcții pentru șiruri de caractere.
strlen
std::size_t strlen( const char* str );
Returnează lungimea șirului str, adică numărul de caractere din șirul al cărui prim caracter
se află la adresa memorată în str. Caracterul nul nu se numără.
Exemple:
strcpy
char* strcpy( char* dest, const char* src );
Copiază caracterele din șirul aflat la adresa src, inclusiv caracterul nul, în șirul al cărui prim
element se află la adresa din dest.
Exemple:
strncpy
char *strncpy( char *dest, const char *src, std::size_t count );
Copiază cel mult count caractere din șirul aflat la adresa src, în șirul al cărui prim element
se află la adresa din dest.
Exemple:
char s[100]="abcdefghjkl";
strncpy(s, "poveste", 3);
cout << s; // povdefghjkl
strcat
char *strcat( char *dest, const char *src );
Adaugă (concatenează) caracterele din șirul aflat la adresa src, inclusiv caracterul nul, la
șirul al cărui prim element se află la adresa din dest.
strchr
char *strchr( char * str, char ch );
Caută caracterul ch în șirul al cărui prim caracter se află în memorie la adresa din str.
Exemple:
char s[21]="pbinfo";
char * p = strchr(s , 'i');
cout << p; // info
char ch = 'i';
if(strchr("aeiou" , ch) != NULL)
cout << "DA"
else
cout << "NU";
//se va afisa DA
strstr
char *strstr( char * s, char * t );
Caută șirul t în șirul al cărui prim caracter se află în memorie la adresa din s.
Funcția returnează adresa NULL, dacă șirul t nu apare în șirul s, respectiva adresa primei
apariții al lui t în s, dacă t apare în s.
Exemplu:
char s[21]="pbinfo";
char * p = strstr(s , "inf");
cout << p; // info
strcmp
int strcmp( char * s, char * t );
Exemplu:
strtok
char *strtok( char *str, const char *sep );
Șirul din care se face extragerea se modifică în urma apelurilor. Dacă este nevoie de el mai
târziu trebuie să-i facem o copie.
Exemplu:
Secvența de mai jos extrage dintr-un șir s cuvintele (separate prin caractere din
mulțimea {' ', ',', '.'}) și le afișează pe linii diferite. Șirul s se presupune declarat și
citit.
https://profs.info.uaic.ro/~infogim/2017/lectii/
78/783_stringuri.pdf
https://www.pbinfo.ro/articole/19/siruri-de-caractere-in-
cpp#intlink-7