C++ Stringfuncties: strcpy(), strcat(), strlen(), strcmp()

โšก Slimme samenvatting

C++ Stringfuncties zoals strcpy, strcat, strlen en strcmp stellen programma's in staat om tekst te kopiรซren, samen te voegen, te meten en te vergelijken. Deze handleiding legt uit wat een string is, hoe je strings in C-stijl en std::string declareert, hoe je hun waarden benadert en hoe je de belangrijkste stringfuncties met voorbeelden toepast.

  • ๐Ÿ”ค Kerndefinitie: Een tekenreeks is een opeenvolging van tekens; een C++ string is een object van de klasse std::string.
  • ๐Ÿงฑ Twee verklaringen: C++ Ondersteunt C-stijl tekenreeksen die eindigen op '\0' en het veiligere klassetype std::string.
  • ๐Ÿ“ฅ Waarden benaderen: Strings worden op naam gelezen en afgedrukt, zoals gedemonstreerd met zowel char-arrays als std::string.
  • ๏ธ Stringfuncties: strcpy kopieert, strcat voegt samen, strlen meet de lengte en strcmp vergelijkt twee tekenreeksen.
  • ???? Vereiste koptekst: De C-stringfuncties bevinden zich in de header `cstring`, die moet worden opgenomen voordat ze kunnen worden gebruikt.

C++ String-functies

Wat is een tekenreeks?

Een string is een reeks karakters. A C++ Een string is een object van de klasse std::string. De tekens worden opgeslagen als reeksen bytes, waarbij toegang tot een enkele tekenbyte is toegestaan.

C++ Strings wijzen dynamisch geheugen toe. Indien nodig kan er tijdens de uitvoering meer geheugen aan de string worden toegewezen. Omdat er geen geheugen vooraf wordt toegewezen, is er geen sprake van geheugenverspilling. We kunnen diverse bewerkingen op strings uitvoeren, waaronder vergelijken, samenvoegen, converteren, enzovoort.

Tekenreeksen declareren

C++ ondersteunt twee soorten stringdeclaraties:

  • Tekenreeks in C-stijl
  • Tekenreeksklassetype

Tekenreeks in C-stijl

Dit type tekenreeksdeclaratie werd geรฏntroduceerd in de C programmeertaal. C++ blijft het ondersteunen. Het is simpelweg een eendimensionale reeks tekens die eindigt met een null-teken (\0). Een null-terminated string bestaat uit de tekens waaruit de string is opgebouwd, gevolgd door een null-teken.

Beschouw de onderstaande stringdeclaratie:

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

De bovenstaande declaratie creรซert een tekenreeks die het woord John vormt. Het woord bestaat uit 4 tekens, maar de tekenreeks heeft een lengte van 5. De extra ruimte is bedoeld voor het null-teken.

Met behulp van de array-initialisatieregel kunnen we de bovenstaande verklaring als volgt schrijven:

char name[] = "John";

Merk op dat u het null-teken niet aan het einde van de tekenreeksconstante hoeft te plaatsen. C++ compiler plaatst automatisch de '\0' aan het einde van de string bij het initialiseren van de array.

std::tekenreeks

De standaard C++ De bibliotheek biedt de stringklasse, die diverse stringbewerkingen ondersteunt. Deze wordt geschreven als std::string.

Om deze klasse te kunnen gebruiken, moeten we deze eerst in onze werkruimte opnemen met behulp van de preprocessor `#include`, zoals hieronder weergegeven:

#include <string>

Vervolgens kunnen we onze string declareren met het trefwoord string. Bijvoorbeeld:

string name = "John";

De bovenstaande instructie creรซert een tekenreeks met de naam naam die de waarde John bevat.

Toegang tot tekenreekswaarden

In C++, hebben we toegang tot de tekenreekswaarden met behulp van de tekenreeksnaam. Bijvoorbeeld:

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

Output:

Toegang tot tekenreekswaarden

Hier is een screenshot van de code:

Toegang tot tekenreekswaarden

Code Uitleg:

  1. Inclusief het iostream headerbestand in onze code. Hiermee kunnen we lezen van en schrijven naar de console.
  2. Inclusief de std-naamruimte om de klassen en functies ervan te gebruiken zonder deze aan te roepen.
  3. De functie main() wordt aangeroepen, waarin de programmalogica moet worden toegevoegd. De { markeert het begin van de body van de functie main().
  4. Een reeks tekens declareren en deze de naam geven. De string slaat de waarde John op. In de extra ruimte wordt het nulteken opgeslagen.
  5. Tekst afdrukken op de console.
  6. Afdrukken van de waarde van de tekenreeks met de naam naam op de console.
  7. De functie main() zou een waarde moeten retourneren als het programma goed werkt.
  8. Einde van de hoofdtekst van de functie main().

Hier is nog een voorbeeld waarbij gebruik wordt gemaakt van de C++ standaard snaarklasse:

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

	string name = "Guru99";

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

	return 0;
}

Output:

Toegang tot tekenreekswaarden

Hier is een screenshot van de code:

Toegang tot tekenreekswaarden

Code Uitleg:

  1. Inclusief het iostream headerbestand in onze code. Hiermee kunnen we lezen van en schrijven naar de console.
  2. Inclusief de standaard stringklasse in onze code.
  3. Inclusief de std-naamruimte om de klassen en functies ervan te gebruiken zonder deze aan te roepen.
  4. De functie main() wordt aangeroepen, waarin de programmalogica moet worden toegevoegd. De { markeert het begin van de body van de functie main().
  5. Een tekenreeks declareren en deze de naam 'name' geven. De tekenreeks zal de waarde opslaan. Guru99.
  6. Het afdrukken van de waarde van de tekenreeksnaam naast wat tekst op de console.
  7. De functie main() zou een waarde moeten retourneren als het programma goed werkt.
  8. Einde van de hoofdtekst van de functie main().

Tekenreeksfuncties in C++

Je zult vaak snaren willen manipuleren. C++ biedt een breed scala aan functies die u hiervoor kunt gebruiken. Deze functies zijn gedefinieerd in de header, dus we moeten deze in onze code opnemen om de functies te kunnen gebruiken. Laten we er een paar bespreken:

strcpy()

Dit is de tekenreekskopieerfunctie. Het kopieert de ene string naar een andere string.

Syntax:

strcpy(string1, string2);

De twee parameters van de functie, string1 en string2, zijn strings. De functie kopieert de string string2 naar string1.

streng()

Dit is de tekenreeksaaneenschakelingsfunctie. Het voegt strings samen.

Syntax:

strcat(string1, string2);

De twee parameters van de functie, string1 en string2, zijn de strings die aan elkaar gekoppeld moeten worden. De bovenstaande functie voegt de string string2 toe aan het einde van de string string1.

strlen()

Dit is de tekenreekslengtefunctie. Het retourneert de lengte van de string die als argument wordt doorgegeven.

Syntax:

strlen(string1);

De parameter string1 is de naam van de string waarvan de lengte moet worden bepaald. De bovenstaande functie retourneert de lengte van de string string1.

strcmp()

Dit is de tekenreeksvergelijkingsfunctie. Het wordt gebruikt voor stringvergelijking.

Syntax:

strcmp(string1, string2);

De bovenstaande functie retourneert 0 als de strings string1 en string2 gelijk zijn, kleiner dan 0 als string1 < string2, en groter dan 0 als string1 > string2.

Voorbeeld:

Het volgende voorbeeld laat zien hoe u de bovenstaande tekenreeksfuncties kunt gebruiken:

#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;
}

Output:

Tekenreeksfuncties in C++

Hier is een screenshot van de code:

Tekenreeksfuncties in C++

Code Uitleg:

  1. Inclusief het iostream headerbestand in onze code. Hiermee kunnen we lezen van en schrijven naar de console.
  2. Inclusief de standaard header in onze code.
  3. Inclusief de std-naamruimte om de klassen en functies ervan te gebruiken zonder deze aan te roepen.
  4. De functie main() wordt aangeroepen, waarin de programmalogica moet worden toegevoegd. De { markeert het begin van de body van de functie main().
  5. Een tekenreeks van 10 tekens declareren en deze de naam name1 geven. De tekenreeks zal de waarde opslaan. Guru99.
  6. Een reeks van 10 tekens declareren en deze de naam name2 geven. De string slaat de waarde John op.
  7. Een reeks van 10 tekens declareren en deze de naam name3 geven.
  8. Het verklaren van een gehele variabele genaamd len.
  9. De tekenreeksnaam1 kopiรซren naar de tekenreeksnaam3.
  10. De waarde van de string 'name3' afdrukken, samen met wat tekst op de console. Het zou moeten afdrukken Guru99.
  11. De string name2 wordt aan het einde van string name1 toegevoegd. De waarde van name1 is nu Guru99John.
  12. De waarde van de string 'name1' afdrukken, samen met wat tekst op de console. Het zou moeten afdrukken Guru99John.
  13. De lengte van de tekenreeks met de naam name1 bepalen en de waarde van de lengte toewijzen aan de variabele len.
  14. De waarde van de variabele `len` wordt samen met wat andere tekst in de console afgedrukt.
  15. De functie main() zou een waarde moeten retourneren als het programma goed werkt.
  16. Einde van de hoofdtekst van de functie main().

Veelgestelde vragen

Ja. AI-assistenten kunnen char-arrays omzetten naar std::string, gerelateerde functies bijwerken en de veiligheidsvoordelen uitleggen. Ontwikkelaars moeten de wijzigingen echter nog steeds controleren op randgevallen, buffergroottes en beoogd gedrag.

Ja. AI-tools genereren uitgewerkte voorbeelden, leggen uit hoe strcpy en strcat zich gedragen en signaleren buffer-overflow-risico's. Dit versnelt het begrip, maar het zelf uitvoeren van de code blijft de beste manier om het gedrag te bevestigen.

std::string beheert het geheugen dynamisch en biedt ingebouwde bewerkingen zoals samenvoeging en vergelijking. C-stijl strings zijn vaste tekenreeksen die eindigen op '\0', waardoor handmatig geheugenbeheer nodig is en ze gevoeliger zijn voor fouten.

Ze kunnen bufferoverloop veroorzaken als de bestemmingsarray te klein is. Veiligere alternatieven zijn onder andere strncpy, strncat of simpelweg het gebruik van std::string-bewerkingen, die het geheugen automatisch beheren en deze risico's verminderen.

Vat dit bericht samen met: