Strings in C++ programmeren

Strings in C++ programmeren In de programmeertaal C++ zijn er diverse bibliotheken. Een van de eerste die je zult leren kennen is de bibliotheek 'string' en de daarbij behorende functies. Wat kun je daar allemaal mee doen en hoe programmeer je dat?

Inhoudsopgave


De C++ string

In C++ is het mogelijk om met de 'string' bibliotheek (onder andere) karakters toe te voegen, te verwijderen, te vervangen, te zoeken en te vergelijken. Zoals je ziet heeft 'string' een eigen 'include' nodig voordat je deze bibliotheek kan gebruiken. Alle voorbeelden kunnen op de plek van het commentaar 'code' worden geplaatst en zijn zo simpel mogelijk gehouden, zodat het begrijpelijk is voor iedereen.

#include <iostream>
#include <string>
// using namespace std;

int main(){

// code

std::cin.get();
return 0;
}

Sommige programmeurs geven de voorkeur aan het gebruik van de namespace 'standard', zodat 'std::' niet de hele tijd voor elk commando hoeft te worden getypt. Wil je dit ook gebruiken, voeg dan 'using namespace std' toe onder je includes en laat 'std::' in de voorbeelden weg.

Strings initialiseren

Bekijk de string als een klasse en het wordt meteen duidelijk dat het een object is waar je meerdere instanties van kan maken en bewerkingen op mag uitvoeren met een aantal functies. Zo is het mogelijk om een string onder andere op de volgende manieren te initialiseren:

Voorbeeld:
std::string s1("Wat een mooie dag."); // ook toegestaan: std::string s1 = "Wat een mooie dag."
std::string s2(s1, 14, 3);
std::string s3(s1.begin()+4, s1.begin()+17);

std::cout << "\n" << s1 << "\n" << s2 << "\n" << s3 << std::endl;

Uitvoer:
Wat een mooie dag.
dag
een mooie dag

String s1 heeft als uitvoer exact wat er tussen aanhalingstekens staat. String s2 heeft drie parameters: een string (s1) en twee integers. De eerste int is om aan te geven vanaf welk punt s2 een kopie verlangt van s1 en de tweede int bepaalt hoeveel karakters er dan gekopieerd moeten worden. Elke string begint op plek één met waarde nul, dus de letter 'd' van 'dag' staat op plek veertien.

String s3 heeft twee parameters; beide vragen iets aan s1 en maken er een kopie van. 'Begin()' wijst naar de eerste plek van de inhoud van s1, dus de combinatie van 'begin()+4' en 'begin()+17' betekent dat s3 een kopie maakt van de karakters in s1 vanaf plek vier tot en met zeventien.

Hoewel het aantal parameters in de constructor van een string kunnen verschillen, is er een overeenkomst in de syntax: stringnaam.functienaam(parameters).

Samenvoegen van strings (+, +=, append)

We kunnen strings aan elkaar plakken door de operator '+' of '+=' te gebruiken. Beide opties doen exact hetzelfde, alleen is '+=' korter. De bewerking 'append' kan zelfs een deel van een andere string toevoegen.

Voorbeeld:
std::string s1("goede");
std::string s2("morgen");
std::string s3 = s1 + s2;

std::cout << s3 << std::endl;

std::string s4("de wereld ver");
s4 += "anderen"; // exact hetzelfde als std::string s4 = s4 + "anderen";

std::cout << s4 << std::endl;

std::string s5("iedereen kan ");
s5.append(s4, 10, 10);

std::cout << s5 << std::endl;

Uitvoer:
goedemorgen
de wereld veranderen
iedereen kan veranderen

String s5 gebruikt 'append' met drie parameters: een string, een int om de plek aan te geven voor het kopiëren en nog een int voor het aantal karakters dat gekopieerd moet worden.

Vergelijken van strings (==, !=, <, >)

Net zoals je kunt zeggen dat drie niet gelijk is aan acht, zo is het ook mogelijk om waarden van strings te vergelijken. In dat vergelijkingsproces gebruik je onder andere de operatoren 'is gelijk aan' (==) en 'is niet gelijk aan' (!=). In plaats van het uitprinten van een melding op je scherm, kunnen er natuurlijk hele andere bewerkingen plaatsvinden. Het ligt er maar net aan wat jij wilt dat er gebeurt. Merk op dat een 'if else'-constructie in het eerste voorbeeld dezelfde uitvoer zou geven.

Voorbeeld:
std::string s1("Amsterdam");
std::string s2("Utrecht");

if(s1 == s2){
std::cout << "Ik bezoek dezelfde stad";
}

if(s1 != s2){
std::cout << "Mijn keus voor de vakantie valt op Amsterdam";
}

Uitvoer:
Mijn keus voor de vakantie valt op Amsterdam

Als je bijvoorbeeld strings op lengte wilt vergelijken, gebruik je de operatoren 'kleiner dan' (<) en 'groter dan' (>) en de functie 'length()' op de gewenste string.

Voorbeeld:
std::string s1("abc is het begin van het alfabet");
std::string s2("abc");

if(s1.length() > s2.length()){
std::cout << "Lengte van string 1: " << s1.length() << " karakters" << std::endl;
std::cout << "Lengte van string 2: " << s2.length() << " karakters" << std::endl;
}

Uitvoer:
Lengte van string 1: 32 karakters
Lengte van string 2: 3 karakters

Invoegen, verwijderen en vervangen van strings (insert, erase, replace)

Met de functie 'insert' kies je een plek uit in een string waar je iets toe wilt voegen, 'erase' is exact het tegenovergestelde en verwijdert karakters. Je kunt ook een deel van een string vervangen door 'replace' te gebruiken.

Voorbeeld:
std::string s1="Mijn kleuren";
std::string s2="favoriete ";
std::string s3="wit, geel, rood, groen, blauw";

s1.insert(5, s2);
std::cout << s1 << std::endl;

s1.erase(20, 2);
std::cout << s1 << std::endl;

s1.insert(20, " is ");
s1.insert(24, s3, 5, 4);
std::cout << s1 << std::endl;

s1.replace(24, 5, "oranje");
std::cout << s1 << std::endl;

s1.erase(s1.begin()+5, s1.end()-15);
std::cout << s1 << std::endl;

Uitvoer:
Mijn favoriete kleuren
Mijn favoriete kleur
Mijn favoriete kleur is geel
Mijn favoriete kleur is oranje
Mijn kleur is oranje

Eerst is er op de vijfde plek van string s1 de gehele string s2 ingevoegd. Dit geeft als uitvoer: "Mijn favoriete kleuren". De eerste parameter geeft de positie aan (5), de tweede parameter (string s2) de verzameling in te voegen karakters.

Daarna gebruiken we s2 op dezelfde manier om 'en' weg te halen van het woord 'kleuren' en voegen we zoals in de eerste bewerking het woord ' is ' toe.

De vierde bewerking heeft vier parameters: de eerste duidt aan waar je wilt starten (positie 24 in s1), de tweede zegt welke string (s3), de derde wijst naar de positie van het karakter in string s3 waar je wilt beginnen (5), en met de vierde geef je aan hoeveel karakters je wilt invoegen (4).

We vervangen 'geel' met 'oranje' door 'replace', door opnieuw aan te geven vanaf welke positie je karakters wilt vervangen, de lengte van je nieuwe string en de karakters zelf.

Iets verwijderen uit een string kan ook op een andere manier, namelijk door uit te gaan van het begin (begin()) en het einde (end()) van je string en vervolgens met '+' of '–' door te geven hoeveel plaatsen de functie vanaf het begin en het einde moet optellen of aftrekken. Wat er overblijft wordt weggehaald.

Een gedeelte van een string verkrijgen (substr)

Als je een kleiner gedeelte van een string wilt inzien heb je de functie 'substr' nodig, een afkorting van 'substring'. In de eerste parameter geef je de startpositie door en in de tweede parameter de gewenste lengte van de substring.

Voorbeeld:
std::string s1("Het zonnestelsel is ontzettend groot.");
std::string s2 = s1.substr(0, 16);
std::string s3 = s2.substr(4, 3);

std::cout << s1 << "\n" << s2 << "\n" << s3;

Uitvoer:
Het zonnestelsel is ontzettend groot.
Het zonnestelsel
zon

Karakters in een string zoeken (find)

Met de functie 'find' is het mogelijk een string te doorzoeken. Je gebruikt als parameter een of meer karakters. Als het exact is teruggevonden krijg je de booleaanse waarde 'true' terug, anders 'false'. Door 'std::string::npos' te gebruiken, geef je aan dat je wilt zoeken tot het einde van de string die de functie 'find' heeft aangeroepen (in beide voorbeelden s1).

Voorbeeld:
std::string s1("Het groene gras");
std::string s2("lucht");

std::string::size_type zoek = s1.find(s2);

if(zoek != std::string::npos)
{
std::cout << "\'" << s2 << "\' gevonden op positie: " << zoek << std::endl;
}else{
std::cout << "\'" << s2 << "\' niet gevonden" << std::endl;
}

std::string s3("groen");
zoek = s1.find(s3);
if(zoek != std::string::npos)
{
std::cout << "\'" << s3 << "\' gevonden op positie: " << zoek << std::endl;
}else{
std::cout << "\'" << s3 << "\' niet gevonden" << std::endl;
}

Uitvoer:
'lucht' niet gevonden
'groen' gevonden op positie: 4

De string bibliotheek heeft meerdere functies, maar als je deze basisfuncties onder de knie hebt, zal de rest je weinig moeite kosten om te begrijpen.
© 2014 - 2024 Starryheart, het auteursrecht van dit artikel ligt bij de infoteur. Zonder toestemming is vermenigvuldiging verboden. Per 2021 gaat InfoNu verder als archief, artikelen worden nog maar beperkt geactualiseerd.
Gerelateerde artikelen
Wat is neurolinguistisch programmeren?De afkorting NLP staat voor neurolinguïstisch programmeren. NLP beslaat een breed gebied, zowel qua methoden als qua wer…
Kleuters leren programmeren met Bee-BotProgrammeren wordt steeds belangrijker in onze maatschappij. Tenslotte wordt bijna alles via computers aangestuurd en ga…
Hoe maak je een appHoe maak je een appApps zijn erg populair bij bedrijven maar ook bij personen in het dagelijkse leven. Hoe maak je nu zelf zo een app? Om v…
Kinderen leren programmeren met ScratchKinderen leren programmeren met ScratchICT wordt steeds belangrijker in onze maatschappij en ook kinderen komen hier steeds meer mee in aanraking. Het is geen…

Testmanagement en -coördinatieTestmanagement en -coördinatieTestmanagement en testcoördinatie, de termen worden erg vaak door elkaar gebruikt. Toch zit er wel degelijk een groot ve…
Hoe programmeer je loops in C++?Hoe programmeer je loops in C++?In een computerprogramma is het soms noodzakelijk dat bepaalde stukken code meer dan eens worden uitgevoerd. Daarbij maa…
Bronnen en referenties
  • Class template std::basic_string, http://en.cppreference.com/w/cpp/string/basic_string
Starryheart (9 artikelen)
Gepubliceerd: 09-06-2014
Rubriek: Pc en Internet
Subrubriek: Programmeren
Bronnen en referenties: 1
Per 2021 gaat InfoNu verder als archief. Het grote aanbod van artikelen blijft beschikbaar maar er worden geen nieuwe artikelen meer gepubliceerd en nog maar beperkt geactualiseerd, daardoor kunnen artikelen op bepaalde punten verouderd zijn. Reacties plaatsen bij artikelen is niet meer mogelijk.