Șirurile de Caractere în C++ 2
1. Obiectivele lecției:
- Să înțeleagă ce sunt șirurile de caractere în C++.
- Să învețe cum să declare, să inițializeze și să manipuleze șiruri de caractere.
- Să implementeze programe practice care implică utilizarea șirurilor de caractere.
2. Conținutul lecției:
Ce este un șir de caractere?
- Definiție: Un șir de caractere este o secvență de caractere, terminată de caracterul special ‘\0’ (null terminator).
- Tipuri de șiruri de caractere în C++:
- Șiruri de caractere în stil C (folosind array-uri de caractere).
- Obiecte de tip std::string din biblioteca standard.
1. Șiruri de caractere în stil C
Declararea și inițializarea
- Declarare:
char sir[dimensiune];
- Ex.: char sir[20]; // Șir de caractere cu dimensiunea 20.
- Inițializare:
- Implicit:
char sir[] = „Salut!”;
- Explicit:
char sir[6] = {‘S’, ‘a’, ‘l’, ‘u’, ‘t’, ‘\0’};
Exemple de operații cu șiruri în stil C
Exemplu 1: Citirea și afișarea unui șir
#include <iostream>
using namespace std;
int main() {
char sir[100];
cout << „Introduceti un sir de caractere: „;
cin >> sir;
cout << „Ati introdus: ” << sir << endl;
return 0;
}
Exemplu 2: Utilizarea funcțiilor din <cstring>
Biblioteca <cstring> oferă funcții pentru manipularea șirurilor:
- strlen(sir) – Returnează lungimea șirului.
- strcpy(dest, src) – Copiază un șir în altul.
- strcat(dest, src) – Concatenează două șiruri.
- strcmp(sir1, sir2) – Compară două șiruri (lexicografic).
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir1[100] = „Salut”;
char sir2[100] = ” lume!”;
// Lungimea șirului
cout << „Lungimea lui sir1: ” << strlen(sir1) << endl;
// Concatenează sir2 la sir1
strcat(sir1, sir2);
cout << „Concatenare: ” << sir1 << endl;
// Comparare
if (strcmp(sir1, „Salut lume!”) == 0) {
cout << „sir1 este egal cu ‘Salut lume!'” << endl;
} else {
cout << „sir1 nu este egal cu ‘Salut lume!'” << endl;
}
return 0;
}
2. Șiruri de caractere folosind std::string
Declararea și inițializarea
- Declarare:
string sir;
- Inițializare:
string sir = „Salut!”;
Exemple de operații cu std::string
Exemplu 1: Citirea și afișarea unui șir
#include <iostream>
#include <string>
using namespace std;
int main() {
string sir;
cout << „Introduceti un sir de caractere: „;
getline(cin, sir);
cout << „Ati introdus: ” << sir << endl;
return 0;
}
Exemplu 2: Operații comune
- Lungimea unui șir:
string sir = „Salut!”;
cout << „Lungimea sirului: ” << sir.length() << endl;
- Concatenare:
string sir1 = „Salut”;
string sir2 = ” lume!”;
string rezultat = sir1 + sir2;
cout << „Rezultat: ” << rezultat << endl;
- Comparare:
string sir1 = „abc”;
string sir2 = „abc”;
if (sir1 == sir2) {
cout << „Sirurile sunt egale.” << endl;
} else {
cout << „Sirurile nu sunt egale.” << endl;
}
- Extracție și inserare:
string sir = „Salut, lume!”;
cout << „Substring: ” << sir.substr(7, 4) << endl; // „lume”
sir.insert(7, „draga „);
cout << „Dupa inserare: ” << sir << endl;
3. Comparație între stil C și std::string
Caracteristică | Stil C | std::string |
Ușurința utilizării | Necesită mai mult cod | Mai simplu și clar |
Dimensiune | Fixă | Dinamică |
Operații | Funcții din <cstring> | Operatori și metode |
4. Complexitatea operațiilor
- Majoritatea operațiilor cu std::string au o complexitate O(n)O(n)O(n), unde nnn este lungimea șirului.
- În cazul șirurilor în stil C, operațiile implică parcurgerea șirului până la caracterul ‘\0’.
5. Activități practice pentru elevi
- Scrieți un program care citește un șir și determină dacă este palindrom.
- Realizați un program care numără toate vocalele dintr-un șir.
- Implementați un program care înlocuiește toate aparițiile unui cuvânt dintr-un șir cu alt cuvânt.
6. Scheme logice
- Citirea unui șir:
- Start -> Declarare șir -> Intrare utilizator -> Afișare șir -> Stop.
- Concatenare:
- Start -> Declarați două șiruri -> Concatenați -> Afișați rezultatul -> Stop.
7. Concluzie:
- Șirurile de caractere sunt esențiale pentru procesarea textului în C++.
- Alegerea între stilul C și std::string depinde de cerințele programului și de simplitatea codului.
- Practica cu șiruri ajută la rezolvarea problemelor legate de procesarea textului.