Funcții pentru Prelucrarea Șirurilor de Caractere din Biblioteca în C++ 4
1. Obiectivele lecției:
- Să înțeleagă scopul și utilizarea funcțiilor din biblioteca <cstring> pentru prelucrarea șirurilor de caractere.
- Să implementeze exemple practice care utilizează aceste funcții.
- Să aplice funcțiile în probleme ce implică manipularea șirurilor de caractere.
2. Biblioteca <cstring>
Biblioteca <cstring> oferă funcții utile pentru manipularea șirurilor de caractere (în stil C). Toate aceste funcții lucrează cu șiruri terminate cu caracterul ‘\0’.
1. Funcții pentru manipularea șirurilor
Funcție | Descriere | Exemplu |
strlen(sir) | Returnează lungimea șirului (fără caracterul ‘\0’). | strlen(„Salut”) -> 5 |
strcpy(dest, src) | Copiază șirul src în dest. | strcpy(dest, „Salut”) |
strncpy(dest, src, n) | Copiază primii n caractere din src în dest. | strncpy(dest, „Salut”, 3) |
strcat(dest, src) | Concatenează src la sfârșitul lui dest. | strcat(dest, ” lume!”) |
strncat(dest, src, n) | Concatenează primii n caractere din src la dest. | strncat(dest, ” lume!”, 5) |
strcmp(sir1, sir2) | Compară lexicografic două șiruri (0 dacă sunt egale). | strcmp(„abc”, „abc”) -> 0 |
strncmp(sir1, sir2, n) | Compară primii n caractere ale șirurilor. | strncmp(„abc”, „abd”, 2) -> 0 |
strchr(sir, c) | Găsește prima apariție a caracterului c în șir. | strchr(„Salut”, ‘a’) -> pointer la ‘a’ |
strrchr(sir, c) | Găsește ultima apariție a caracterului c în șir. | strrchr(„Salut”, ‘a’) -> pointer la ‘a’ |
strstr(sir1, sir2) | Găsește primul șir sir2 în sir1. | strstr(„Salut lume”, „lume”) |
strtok(sir, delim) | Împarte un șir în segmente, folosind delimitatori. | strtok(„abc,def,ghi”, „,”) |
3. Exemple practice
Exemplu 1: Lungimea unui șir
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir[] = „Salut”;
cout << „Lungimea sirului \”” << sir << „\” este: ” << strlen(sir) << endl;
return 0;
}
Exemplu 2: Copierea și concatenarea șirurilor
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir1[50] = „Salut”;
char sir2[] = ” lume!”;
// Copiere
char sir3[50];
strcpy(sir3, sir1);
cout << „Copiat: ” << sir3 << endl;
// Concatenare
strcat(sir1, sir2);
cout << „Concatenare: ” << sir1 << endl;
return 0;
}
Exemplu 3: Compararea șirurilor
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir1[] = „abc”;
char sir2[] = „abd”;
if (strcmp(sir1, sir2) == 0) {
cout << „Sirurile sunt egale.” << endl;
} else if (strcmp(sir1, sir2) < 0) {
cout << „\”” << sir1 << „\” este mai mic lexicografic decât \”” << sir2 << „\”” << endl;
} else {
cout << „\”” << sir1 << „\” este mai mare lexicografic decât \”” << sir2 << „\”” << endl;
}
return 0;
}
Exemplu 4: Găsirea unui caracter sau subșir
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir[] = „Salut lume”;
// Găsirea unui caracter
char* pozitie = strchr(sir, ‘u’);
if (pozitie) {
cout << „Prima aparitie a caracterului ‘u’ este la pozitia: ” << (pozitie – sir) << endl;
}
// Găsirea unui subșir
char* subSir = strstr(sir, „lume”);
if (subSir) {
cout << „Subsirul \”lume\” începe la pozitia: ” << (subSir – sir) << endl;
}
return 0;
}
Exemplu 5: Segmentarea unui șir (strtok)
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sir[] = „abc,def,ghi”;
char* token = strtok(sir, „,”);
while (token != NULL) {
cout << „Segment: ” << token << endl;
token = strtok(NULL, „,”);
}
return 0;
}
4. Activități practice pentru elevi
- Scrieți un program care verifică dacă un șir este palindrom.
- Realizați un program care separă un șir în cuvinte și afișează fiecare cuvânt pe o linie nouă.
- Implementați un program care înlocuiește toate aparițiile unui caracter cu altul într-un șir.
5. Scheme logice
- Citirea unui șir:
- Start -> Citire șir -> Afișare șir -> Stop.
- Compararea a două șiruri:
- Start -> Comparare lexicografică cu strcmp -> Afișare rezultat -> Stop.
- Segmentarea unui șir:
- Start -> Aplicare strtok -> Iterare pe segmente -> Afișare segmente -> Stop.
6. Concluzie:
- Funcțiile din <cstring> sunt esențiale pentru manipularea șirurilor de caractere în stil C.
- Aceste funcții permit operații precum copierea, concatenarea, compararea și segmentarea șirurilor.
- Practica este importantă pentru a înțelege corect utilizarea și limitele acestor funcții.