Tipul șir de caractere în C++: Definiție, Operații și Exemple de Algoritmi

Introducere

În limbajul de programare C++, tipul de date “șir de caractere” reprezintă o colecție de caractere consecutive, în care fiecare caracter este stocat într-o poziție de memorie. Acest tip de date este foarte util în programare, deoarece permite manipularea și prelucrarea textelor într-un mod eficient. În acest articol, vom explora definiția tipului de date “șir de caractere” în C++, vom discuta despre operațiile pe șiruri de caractere și vom prezenta câteva exemple de algoritmi.

Definiție

În C++, un șir de caractere este reprezentat ca un vector de caractere, în care ultimul element este un caracter special numit “caracterul nul” (). Acest caracter semnalează sfârșitul șirului și este utilizat pentru a indica că nu mai există alte caractere în șir.

De exemplu, pentru a declara și inițializa un șir de caractere în C++, putem utiliza următoarea sintaxă:

char nume_șir[] = "Exemplu";

În acest exemplu, variabila “nume_șir” este declarată ca un șir de caractere și este inițializată cu valoarea “Exemplu”. Lungimea șirului este determinată automat de compilator, în funcție de numărul de caractere din inițializare.

Operații pe șiruri de caractere

Există o serie de operații pe șiruri de caractere pe care le putem realiza în C++. Vom prezenta câteva dintre cele mai comune:

1. Concatenarea

Concatenarea reprezintă operația de a combina două sau mai multe șiruri de caractere într-un singur șir. În C++, putem realiza concatenarea utilizând operatorul de concatenare (+) sau funcția strcat().

// Utilizând operatorul de concatenare
char s1[] = "Hello";
char s2[] = " World";
char rezultat[20];
strcpy(rezultat, s1);
strcat(rezultat, s2);
// rezultat va conține "Hello World"

2. Compararea

Compararea este operația de a verifica dacă două șiruri de caractere sunt egale sau nu. În C++, putem realiza compararea utilizând funcția strcmp(). Această funcție returnează 0 dacă cele două șiruri sunt identice.

char s1[] = "Hello";
char s2[] = "Hello";
if (strcmp(s1, s2) == 0) {
    // șirurile sunt identice
}

3. Căutarea

Căutarea este operația de a găsi o anumită secvență de caractere într-un șir. În C++, putem realiza căutarea utilizând funcția strstr(). Această funcție returnează un pointer către prima apariție a secvenței căutate sau NULL dacă secvența nu a fost găsită.

char s1[] = "Hello World";
char *rezultat = strstr(s1, "World");
if (rezultat != NULL) {
    // secvența "World" a fost găsită în șirul s1
}

Exemple de algoritmi

În continuare, vom prezenta câteva exemple de algoritmi care implică manipularea șirurilor de caractere în C++:

1. Algoritmul de inversare a unui șir

Acest algoritm inversează ordinea caracterelor într-un șir de caractere. Putem realiza acest lucru utilizând două pointer-e, unul la începutul șirului și celălalt la sfârșitul acestuia. Schimbăm valorile la care se referă pointer-ele și apoi le deplasăm către mijlocul șirului până când se întâlnesc.

void inversareSir(char *s) {
    char *inceput = s;
    char *sfarsit = s + strlen(s) - 1;
    while (inceput < sfarsit) {
        char temp = *inceput;
        *inceput = *sfarsit;
        *sfarsit = temp;
        inceput++;
        sfarsit--;
    }
}

2. Algoritmul de numărare a vocalelor într-un șir

Acest algoritm numără numărul de vocale dintr-un șir de caractere. Parcurgem fiecare caracter din șir și verificăm dacă acesta este o vocală.

int numarVocale(char *s) {
    int numar = 0;
    for (int i = 0; i < strlen(s); i++) {
        if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') {
            numar++;
        }
    }
    return numar;
}

Concluzie

În acest articol, am discutat despre tipul de date “șir de caractere” în limbajul de programare C++. Am explorat definiția acestui tip de date, am prezentat câteva operații comune pe șiruri de caractere și am oferit exemple de algoritmi care implică manipularea șirurilor de caractere. Utilizarea corectă a acestor operații și algoritmii ne permite să lucrăm eficient cu textele în C++ și să rezolvăm diverse probleme legate de prelucrarea acestora.