Tipul de date
șir de
caractere
Definiție
Un șir de caractere este o succesiune de caractere stocate într-un tablou
unidimensional de tip char.
Notă:
În C++, șirurile de caractere clasice (C-style strings) se termină întotdeauna cu
caracterul special '\0’ (null terminator), care marchează sfârșitul șirului.
Declararea unui șir de caractere
Sintaxă generală:
char nume_sir[dimensiune];
Explicație:
•char — tipul de date de bază, care reține un caracter ASCII;
•[dimensiune] — numărul maxim de caractere care pot fi stocate în șir (inclusiv '\0',
caracterul nul).
Exemple
• char nume[10]; // șir gol, cu spațiu pentru 9 caractere + '\0’
0123456789
• char salut[] = "Salut!"; // inițializare direct
0 1 2 3 4 5 6 7 8 9
S a l u t \0
• char tara[20] = "Moldova"; // șir cu lungime maximă 19 caractere
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
M o l d o v a \0
• char nume[4] = {'A', 'n', 'a', '\0’}; //array de caractere
0 1 2 3 A n a \0
Accesarea elementelor
char nume[10] = "Ion";
cout << nume[0]; // Afișează I
nume[1] = 'a'; // Înlocuiește 'o' cu 'a' → "Ian"
Citirea și afișarea unui șir
char text[30];
cout << "Introdu textul: ";
cin >> text; // citește până la primul spațiu
cout << "Ai scris: " << text;
Notă:
Pentru citirea spațiilor dintre cuvinte se foloseşte funcţia [Link]();
Citirea și afișarea unui șir
[Link] (S, n);
unde:
S – variabila în care va fi depus şirul de caractere extras din fluxul de
intrare; n – numărul maxim de caractere ce pot fi citite din fluxul de intrare.
char text[30];
cout << "Introdu textul: ";
[Link] (text, 15);
cout << "Ai scris: " << text;
Funcții pentru
șiruri de
caractere
bibliteca cstring
Copiere și concatenare
Funcție Descriere Exemplu
strcpy(S1, S2) Copiază șirul S2 în S1 strcpy(S1, S2);
(înlocuiește conținutul lui S1).
strncpy(S1, S2, n) Copiază primele n strncpy(S1, S2, 5);
caractere din S2 în S1.
strcat(S1, S2) Alipește (concatenează) strcat(S1, S2);
șirul S2 la sfârșitul lui S1.
strncat(S1, S2, n) Adaugă primele n strncat(S1, S2, 3);
caractere din S2 la
sfârșitul lui S1.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s1[50];
char s2[50] = "Salut";
char s3[50] = " lume!";
strcpy(s1, s2);
cout << "După strcpy(s1, s2): " << s1 << endl;
strncpy(s1, "Programare", 4);
s1[4] = '\0';
cout << "După strncpy(s1, \"Programare\", 4): " << s1 << endl;
strcpy(s1, "Buna");
strcat(s1, s3);
cout << "După strcat(s1, s3): " << s1 << endl;
strcpy(s1, "Salut");
strncat(s1, " prietene!", 4);
cout << "După strncat(s1, \" prietene!\", 4): " << s1 <<
endl; return 0;
}
Lungime și comparație
Funcție Descriere Exemplu
strlen(S) Returnează lungimea int n = strlen(S);
șirului (fără caracterul '\0').
strcmp(S1, S2) Compară lexicografic S1 și if (strcmp(S1, S2) == 0)
S2. Returnează: 0 → egale
<0 → S1 < S2 >0 → S1 >
S2
strncmp(S1, S2, n) Compară primele n strncmp(S1, S2, 3);
caractere.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s1[50] = "Programare";
char s2[50] = "Program";
char s3[50] = "Programare";
cout << "Lungimea lui s1 este: " << strlen(s1) << endl;
cout << "Lungimea lui s2 este: " << strlen(s2) << endl;
if (strcmp(s1, s2) == 0)
cout << "s1 si s2 sunt egale." << endl;
else if (strcmp(s1, s2) > 0)
cout << "s1 este mai mare decat s2 (alfabetic)." << endl;
else
cout << "s1 este mai mic decat s2 (alfabetic)." << endl;
int n = 7;
if (strncmp(s1, s2, n) == 0)
cout << "Primele " << n << " caractere din s1 si s2 sunt egale." << endl;
else
cout << "Primele " << n << " caractere din s1 si s2 sunt diferite." << endl;
if (strcmp(s1, s3) == 0)
cout << "s1 si s3 sunt identice." << endl;
return 0;
}
Căutare de caractere sau subșiruri
Funcție Descriere Exemplu
strchr(S, c) Returnează adresa primei char *p = strchr(S, 'a');
apariții a caracterului c în
S (sau NULL dacă nu
există).
strrchr(S, c) Returnează adresa char *p = strrchr(S, 'a');
ultimei apariții a
caracterului c.
strstr(S1, S2) Caută prima apariție char *p = strstr(S1, "ana");
a șirului S2 în S1.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[100] = "Programarea in C++ este interesanta!";
char *primaA = strchr(text, 'a');
if (primaA != NULL)
cout << "Prima aparitie a literei 'a' este la pozitia: " << (primaA - text) << endl; else
cout << "Litera 'a' nu a fost gasita in text." << endl;
char *ultimaA = strrchr(text, 'a');
if (ultimaA != NULL)
cout << "Ultima aparitie a literei 'a' este la pozitia: " << (ultimaA - text) << endl; else
cout << "Litera 'a' nu a fost gasita in text." << endl;
char subSir[] = "C++";
char *pozitie = strstr(text, subSir);
if (pozitie != NULL)
cout << "Subsirul \"" << subSir << "\" a fost gasit la pozitia: " << (pozitie - text) << endl; else
cout << "Subsirul \"" << subSir << "\" nu a fost gasit." << endl;
return 0;
}
Manipularea caracterelor individuale
Funcție Descriere Exemplu
strtok(S, delimitatori) Împarte șirul S în „cuvinte” char *p = strtok(S, " ,.");
separate de delimitatori (' ',
',', etc.).
strset(S, c) (ne-standardă, Umple șirul S cu carac
dar folosită uneori) strset(
strnset(S, c, n) (ne-standardă) Umple primele n strnset(S, '-', 5);
caractere din S cu c.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[] = "C++ este un limbaj puternic si eficient"; cout << "Text initial: " <<
text << endl;
cout << "\nCuvintele separate cu strtok():" << endl; char *cuvant = strtok(text, "
");
while (cuvant != NULL) {
cout << cuvant << endl;
cuvant = strtok(NULL, " ");
}
return 0;
}
Manipularea caracterelor individuale
Funcție Descriere Exemplu
atoi(S) Convertește șirul S în int. int x = atoi("123");
atof(S) Convertește șirul S în float/double. float y = atof("3.14");
atol(S) Convertește șirul S în long. long n = atol("100000");
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
char s1[] = "123";
char s2[] = "3.14159";
char s3[] = "9876543210";
int x = atoi(s1);
cout << "atoi(\"" << s1 << "\") = " << x << endl; double y = atof(s2);
cout << "atof(\"" << s2 << "\") = " << y << endl; long z = atol(s3);
cout << "atol(\"" << s3 << "\") = " << z << endl; return 0;
}
Alte funcții utile
Funcție Descriere Exemplu
memcpy(dest, src, n) Copiază n bytes din src memcpy(S1, S2, 5);
în dest.
memset(S, c, n) Umple primele n bytes din memset(S, 0, 20);
S cu caracterul c.
memcmp(S1, S2, n) Compară primele n bytes. memcmp(S1, S2, 5);
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s1[20] = "Salut!";
char s2[20];
char s3[20] = "Salut!";
memcpy(s2, s1, strlen(s1) + 1);
cout << "Dupa memcpy(s2, s1): " << s2 << endl; memset(s2, '*', 3);
s2[strlen(s1)] = '\0’;
cout << "Dupa memset(s2, '*', 3): " << s2 << endl; int cmp = memcmp(s1, s3, strlen(s1)); if
(cmp == 0)
cout << "s1 si s3 sunt identice." << endl; else
cout << "s1 si s3 sunt diferite." << endl; return 0;
}
Programe pe șiruri
de caractere prin
char
Nr de apariții a unui
caracter #include <iostream>
#include <cstring>
using namespace std;
int main() {
char S[50] = "ALABAMA";
int contor = 0;
for (int i = 0; i < strlen(S); i++) {
if (S[i] == 'A') {
contor++;
}
}
cout << "Sirul este: " << S << endl;
cout << "Caracterul 'A' apare de " << contor << " ori." << endl;
return 0;
}
Program număr de vocale
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[100];
cout << "Introduceti un sir de caractere: ";
[Link](text, 100);
int lungime = strlen(text);
int nrVocale = 0;
for (int i = 0; i < lungime; i++) {
char c = text[i];
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') {
nrVocale++;
cout << "Numarul de vocale din sir este: " << nrVocale << endl;
return 0;
Program număr de vocale
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[100];
char vocale[] = {'a','e','i','o','u','A','E','I','O','U'};
int nrVocale = 0;
cout << "Introduceti un sir de caractere: ";
[Link](text, 100);
int lungime = strlen(text);
int nrVocaleTotal = sizeof(vocale) / sizeof(vocale[0]);
for (int i = 0; i < lungime; i++) {
for (int j = 0; j < nrVocaleTotal; j++) {
if (text[i] == vocale[j]) {
nrVocale++;
break;
}
}
}
cout << "Numarul de vocale din sir este: " << nrVocale << endl;
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char text[200];
cout << "Introduceti un sir de caractere:
"; [Link](text, 200);
int nrA = 0, nrE = 0, nrI = 0, nrO = 0, nrU =
0; int lungime = strlen(text);
for (int i = 0; i < lungime; i++) {
char c = text[i];
switch (c) {
case 'a': case 'A': nrA++; break;
case 'e': case 'E': nrE++; break;
case 'i': case 'I': nrI++; break;
case 'o': case 'O': nrO++; break;
case 'u': case 'U': nrU++; break;
}
}
cout << "Numarul de aparitii al vocalelor:" <<
endl; cout << "a/A: " << nrA << endl;
cout << "e/E: " << nrE << endl;
cout << "i/I: " << nrI << endl;
cout << "o/O: " << nrO << endl;
cout << "u/U: " << nrU << endl;
return 0;
}
Șiruri de caractere
prin String
Declararea unui șir de caractere
Sintaxă generală:
string nume_sir;
Explicație:
•string este un tip de date complex (clasă) definit în biblioteca <string>. •permite
stocarea și manipularea șirurilor de caractere fără gestionarea manuală a
dimensiunii sau a caracterului '\0'.
•dimensiunea sa este dinamică — poate crește automat când adăugăm caractere.
Exemple
• string nume; // declarare fără inițializare • string oras =
"Chișinău"; // inițializare directă • string mesaj("Salut!");
// inițializare prin constructor
Accesarea elementelor
string nume = "Ion";
cout << nume[0]; // I
nume[1] = 'a'; // modifică → "Ian"
Citirea și afișarea unui șir
string text;
cout << "Scrie un text: ";
getline(cin, text); // citește inclusiv spațiile
cout << "Ai scris: " << text;
Notă:
Pentru citirea spațiilor dintre cuvinte se foloseşte funcţia getline();
Funcții pentru
șiruri de
caractere
bibliteca string
Declarare și acces
Funcție Descriere Exemplu
string s = "text"; Declară și inițializează un șir string nume = "Ana";
s[i] Accesează caracterul de cout << s[0]; // A
la poziția i
[Link](i) Accesează caracterul cout << [Link](2);
cu verificare de limită
[Link]() Returnează primul caracter cout << [Link]();
[Link]() Returnează ultimul caracter cout << [Link]();
[Link]() / [Link]() Returnează lungimea șirului cout << [Link]();
[Link]() Verifică dacă șirul este gol if ([Link]()) cout << "gol";
Modificare
Funcție Descriere Exemplu s = "nou"; Atribuie un nou text șirului s = "Salut"; s += "abc";
Adaugă text la final s += " buna!"; [Link]("abc"); Adaugă text la sfârșit [Link]("!!!");
s.push_back('!') Adaugă un caracter la final s.push_back('!'); s.pop_back() Elimină ultimul
caracter s.pop_back(); [Link](poz, len, "nou") Înlocuiește o porțiune [Link](0,2,"ta");
[Link](poz, "text") Inserează text într-o poziție [Link](3,"XYZ");
Comparare
Funcție Descriere Exemplu s == t Verifică egalitatea a două șiruri if (s == "Ana") cout<<"egal"; s != t
Verifică inegalitatea if (s != t) s < t, s > t Compară lexicografic "Ana" < "Zoe" [Link](t) Returnează
<0, 0, >0 în funcție de
comparație if ([Link](t)==0)
Căutare și extragere
Funcție Descriere Exemplu [Link]("abc") Găsește prima apariție [Link]("na"); [Link]("a") Găsește
ultima apariție [Link]("a"); s.find_first_of("aeiou") Găsește prima vocală s.find_first_of("aeiou");
s.find_last_of("aeiou") Găsește ultima vocală s.find_last_of("aeiou"); [Link](poz, len) Extrage o
subsecvență [Link](0,3); // "Ana"
Ștergere și inserare
Funcție Descriere Exemplu [Link](poz, len) Șterge caractere [Link](3,2); [Link]()
Golește complet șirul [Link]();
Conversii și alte operații
Funcție Descriere Exemplu stoi(s) Convertește string → int int n = stoi("123"); stof(s) Convertește
string → float float x = stof("4.5"); stod(s) Convertește string → double double y = stod("3.14");
to_string(n) Convertește număr → string string s = to_string(45); [Link](), [Link]() Returnează
iteratori for (auto c : s) cout << c;
Programe pe șiruri
de caractere prin
string
Afișarea fiecărui caracter dintr-un
string
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Salut";
cout << "Caracterele din string sunt: ";
for (int i = 0; i < [Link](); i++) {
cout << text[i] << " ";
}
cout << endl;
return 0;
}
Concatenarea a două stringuri
#include <iostream>
#include <string>
using namespace std;
int main() {
string nume = "Ana";
string prenume = "Maria";
string numeComplet = nume + " " + prenume; cout <<
"Numele complet este: " << numeComplet << endl; return
0;
}
Găsirea unei subsecvențe într-un string
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Programare C++";
string cauta = "C++";
size_t poz = [Link](cauta);
if (poz != string::npos) {
cout << "\"" << cauta << "\" găsit la poziția: " << poz << endl;
} else {
cout << "\"" << cauta << "\" nu a fost găsit." << endl;
}
return 0;
}
Numărarea vocalelor într-un string
#include <iostream>
#include <string>
using namespace std;
int main() {
string text;
cout << "Introdu un text: ";
getline(cin, text);
int nrVocale = 0;
string vocale = "aeiouAEIOU";
for (char c : text) {
if ([Link](c) != string::npos) {
nrVocale++;
}
}
// for (int i = 0; i < [Link](); i++) {
// char c = text[i];
// if ([Link](c) != string::npos) {
// nrVocale++;
// }
// }
cout << "Numărul de vocale este: " << nrVocale << endl;
return 0;
Inversarea unui string
#include <iostream>
#include <string>
using namespace std;
int main() {
string text;
cout << "Introdu un text: ";
getline(cin, text);
string invers = "";
for (int i = [Link]() - 1; i >= 0; i--) {
invers += text[i];
}
cout << "Textul inversat: " << invers << endl;
return 0;
}
Palindrom
#include <iostream>
#include <string>
using namespace std;
int main() {
string text;
cout << "Introdu un text: ";
getline(cin, text);
bool palindrom = true;
int n = [Link]();
for (int i = 0; i < n / 2; i++) {
if (text[i] != text[n - 1 - i]) {
palindrom = false;
break;
}
}
if (palindrom) {
cout << "Textul este palindrom." << endl;
} else {
cout << "Textul nu este palindrom." << endl;
}
return 0;
Caracteristică char[] string
Tip de date Tablou de caractere (C) Clasă din STL (C++)
Terminare cu '\0' Da Nu este necesară
Dimensiune Fixă Dinamică
Bibliotecă necesară <cstring> <string>
Metode disponibile Nu are (se folosesc Are metode proprii:
funcții str...) .size(), .append(),
.substr()
Citire cu spații [Link]() getline(cin, var)
Exemplu char nume[20] = "Ana"; string nume = "Ana";
Biblioteca <cctype>
Funcție Descriere
toupper(c) Transformă literele în majuscule islower(c) Verifică dacă un caracter este literă mică
isupper(c) Verifică dacă un caracter este literă mare isdigit(c) Verifică dacă un caracter este cifră
isalpha(c) Verifică dacă un caracter este literă isspace(c) Verifică dacă este spațiu, tab, enter etc.