C++ Funcție șir de caractere: strcpy(), strcat(), strlen(), strcmp()

⚡ Rezumat inteligent

C++ Funcțiile de șiruri de caractere precum strcpy, strcat, strlen și strcmp permit programelor să copieze, să unească, să măsoare și să compare text. Această resursă explică ce este un șir de caractere, cum se declară șiruri de caractere în stil C și std::string, cum se accesează valorile acestora și cum se aplică funcțiile de bază ale șirurilor de caractere cu exemple.

  • 🔤 Definiția de bază: Un șir de caractere este o secvență de caractere; a C++ `string` este un obiect al clasei `std::string`.
  • 🧱 Două declarații: C++ acceptă tablouri de caractere în stil C terminate cu '\0' și tipul de clasă std::string, mai sigur.
  • 📥 Accesarea valorilor: Șirurile de caractere sunt citite și afișate după nume, demonstrat atât cu tablouri de caractere (char arrays), cât și cu std::string.
  • 🛠️ Funcții de șiruri de caractere: strcpy copiază, strcat concatenează, strlen măsoară lungimea, iar strcmp compară două șiruri de caractere.
  • 📦 Antet necesar: Funcțiile șirului C se află în antetul cstring, care trebuie inclus înainte de utilizare.

C++ Funcții șiruri

Ce este un șir?

Un șir este o secvență de caractere. O C++ `string` este un obiect al clasei `std::string`. Caracterele sunt stocate ca secvențe de octeți, fiind permis accesul la un singur octet de caracter.

C++ Șirurile de caractere alocă memoria dinamic. Mai multă memorie poate fi alocată șirului de caractere în timpul execuției, dacă este necesar. Deoarece nu există o pre-alocare a memoriei, nu există risipă de memorie. Putem efectua diverse operațiuni asupra șirurilor de caractere, inclusiv comparare, concatenare, conversie etc.

Declararea șirurilor

C++ acceptă două tipuri de declarații de șir:

  • Șir de caractere în stil C
  • Tipul clasei șir

Șir de caractere în stil C

Acest tip de declarație de șiruri de caractere a fost introdus în limbaj de programare C. C++ continuă să îl susțină. Este pur și simplu o matrice unidimensională de caractere terminată cu un caracter nul (\0). Un șir terminat cu nul are caracterele care alcătuiesc șirul, urmate de un caracter nul.

Luați în considerare declarația de șir de mai jos:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

Declarația de mai sus creează un șir de caractere care formează cuvântul John. Cuvântul are 4 caractere, dar șirul de caractere are o dimensiune de 5. Spațiul suplimentar permite păstrarea caracterului nul.

Folosind regula de inițializare a matricei, putem scrie declarația de mai sus după cum urmează:

char name[] = "John";

Rețineți că nu trebuie să plasați caracterul nul la sfârșitul constantei șir de caractere. C++ compilatorul va plasa automat „\0” la sfârșitul șirului la inițializarea matricei.

std::string

Standardul C++ biblioteca oferă clasa string, care suportă diverse operații cu șiruri de caractere. Este scrisă ca std::string.

Pentru a utiliza această clasă, trebuie mai întâi să o includem în spațiul nostru de lucru folosind preprocesorul #include, așa cum se arată mai jos:

#include <string>

Apoi, putem declara șirul nostru folosind cuvântul cheie șir. De exemplu:

string name = "John";

Declarația de mai sus va crea un șir numit nume pentru a păstra valoarea John.

Accesarea valorilor șirului

In C++, putem accesa valorile șirului folosind numele șirului. De exemplu:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

ieșire:

Accesarea valorilor șirului

Iată o captură de ecran a codului:

Accesarea valorilor șirului

Code Explicaţie:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  3. Apelarea funcției main() în care ar trebui adăugată logica programului. { marchează începutul corpului funcției main().
  4. Declararea unui șir de caractere și atribuirea numelui. Șirul va stoca valoarea John. Spațiul suplimentar va stoca caracterul nul.
  5. Imprimarea unui text pe consolă.
  6. Imprimarea valorii șirului numit nume pe consolă.
  7. Funcția main() ar trebui să returneze o valoare dacă programul rulează bine.
  8. Sfârșitul corpului funcției main().

Iată un alt exemplu folosind C++ clasa standard de șiruri:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

ieșire:

Accesarea valorilor șirului

Iată o captură de ecran a codului:

Accesarea valorilor șirului

Code Explicaţie:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Includerea clasei de șir standard în codul nostru.
  3. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  4. Apelarea funcției main() în care ar trebui adăugată logica programului. { marchează începutul corpului funcției main().
  5. Declararea unui șir de caractere și atribuirea numelui name. Șirul de caractere va stoca valoarea Guru99.
  6. Imprimarea valorii numelui șirului alături de un text pe consolă.
  7. Funcția main() ar trebui să returneze o valoare dacă programul rulează bine.
  8. Sfârșitul corpului funcției main().

Funcții șir în C++

Veți dori adesea să manipulați șiruri. C++ oferă o gamă largă de funcții pe care le puteți utiliza în acest scop. Aceste funcții sunt definite în antet, așa că trebuie să îl includem în codul nostru pentru a putea utiliza funcțiile. Să discutăm câteva:

strcpy()

Aceasta este funcția de copiere a șirurilor. Copiază un șir în altul.

Sintaxă:

strcpy(string1, string2);

Cei doi parametri ai funcției, string1 și string2, sunt șiruri de caractere. Funcția va copia șirul string2 în string1.

strcat()

Aceasta este funcția de concatenare a șirurilor. Concatenează șiruri.

Sintaxă:

strcat(string1, string2);

Cei doi parametri ai funcției, string1 și string2, reprezintă șirurile de caractere care vor fi concatenate. Funcția de mai sus va concatena șirul string2 până la sfârșitul șirului string1.

strlen()

Aceasta este funcția de lungime a șirului. Returnează lungimea șirului transmis ca argument.

Sintaxă:

strlen(string1);

Parametrul șir1 este numele șirului a cărui lungime urmează să fie determinată. Funcția de mai sus va returna lungimea șirului șir1.

strcmp()

Aceasta este funcția de comparare a șirurilor. Este folosit pentru compararea șirurilor.

Sintaxă:

strcmp(string1, string2);

Funcția de mai sus va returna 0 dacă șirurile string1 și string2 sunt similare, mai mic decât 0 dacă string1 < string2 și mai mare decât 0 dacă string1 > string2.

Exemplu:

Următorul exemplu demonstrează cum să utilizați funcțiile șir de mai sus:

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

ieșire:

Funcții șir în C++

Iată o captură de ecran a codului:

Funcții șir în C++

Code Explicaţie:

  1. Includerea fișierului antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
  2. Inclusiv standardul antet în codul nostru.
  3. Includerea spațiului de nume std pentru a-și folosi clasele și funcțiile fără a-l apela.
  4. Apelarea funcției main() în care ar trebui adăugată logica programului. { marchează începutul corpului funcției main().
  5. Declararea unui șir de caractere de 10 caractere și atribuirea acestuia numele name1. Șirul va stoca valoarea Guru99.
  6. Declararea unui șir de 10 caractere și dându-i numele nume2. Șirul va stoca valoarea John.
  7. Declararea unui șir de 10 caractere și dându-i numele nume3.
  8. Declararea unui variabilă întreagă numit len.
  9. Copierea șirului name1 în șirul name3.
  10. Afișează valoarea șirului name3 alături de un text în consolă. Ar trebui să afișeze Guru99.
  11. Concatenarea șirului name2 la sfârșitul șirului name1. Valoarea lui name1 este acum Guru99Ioan.
  12. Afișează valoarea șirului name1 alături de un text în consolă. Ar trebui să afișeze Guru99Ioan.
  13. Determinarea lungimii șirului de caractere numit name1 și atribuirea valorii lungimii variabilei len.
  14. Afișarea valorii variabilei len alături de alt text în consolă.
  15. Funcția main() ar trebui să returneze o valoare dacă programul rulează bine.
  16. Sfârșitul corpului funcției main().

Întrebări frecvente

Da. Asistenții inteligenți artificiali pot refactoriza tablourile de caractere în std::string, pot actualiza funcțiile aferente și pot explica beneficiile de siguranță. Dezvoltatorii ar trebui să revizuiască în continuare modificările pentru cazurile limită, dimensiunile bufferelor și comportamentul preconizat.

Da. Instrumentele de inteligență artificială generează exemple practice, explică cum se comportă strcpy și strcat și semnalează riscurile de buffer-overflow. Acest lucru accelerează înțelegerea, dar rularea codului personal rămâne cea mai bună modalitate de a confirma comportamentul.

std::string gestionează memoria dinamic și oferă operațiuni încorporate, cum ar fi concatenarea și compararea. Șirurile de caractere în stil C sunt tablouri de caractere fixe terminate prin '\0' care necesită gestionarea manuală a memoriei și sunt mai predispuse la erori.

Acestea pot cauza depășiri ale bufferului dacă matricea de destinație este prea mică. Alternative mai sigure includ strncpy, strncat sau pur și simplu utilizarea operațiilor std::string, care gestionează automat memoria și reduc aceste riscuri.

Rezumați această postare cu: