Hoe een string te splitsen in C++

How Split String C



Werken met stringgegevens is een essentieel onderdeel van elke programmeertaal. Soms moeten we de stringgegevens splitsen voor programmeerdoeleinden. De functie split() bestaat in veel programmeertalen om de string in meerdere delen te verdelen. Er is geen ingebouwde split()-functie in C++ voor het splitsen van strings, maar er zijn veel verschillende manieren in C++ om dezelfde taak uit te voeren, zoals het gebruik van getlijn() functie, slag() functie, met behulp van vind() en wissen() functies, enz. Het gebruik van deze functies om strings in C++ te splitsen is in deze tutorial uitgelegd.

Voorwaarde

Voordat u de voorbeelden van deze tutorial bekijkt, moet u controleren of de g++-compiler is geïnstalleerd of niet in het systeem. Als u Visual Studio Code gebruikt, installeer dan de benodigde extensies om de C++-broncode te compileren om de uitvoerbare code te maken. Hier is de toepassing Visual Studio Code gebruikt om de C++-code te compileren en uit te voeren.







String splitsen met de functie getline()

De functie getline() wordt gebruikt om tekens uit een tekenreeks of bestandsinhoud te lezen totdat een bepaald scheidingsteken of scheidingsteken is gevonden en om elke ontleden-tekenreeks op te slaan in een andere tekenreeksvariabele. De functie gaat door met de taak totdat de volledige inhoud van de tekenreeks of het bestand is geparseerd. De syntaxis van deze functie wordt hieronder gegeven.



Syntaxis:



istream&getline(istream&is, string&str,chardelimo);

Hier, de eerste parameter, isstroom, is het object waaruit de tekens worden geëxtraheerd. De tweede parameter is een stringvariabele die de geëxtraheerde waarde opslaat. De derde parameter wordt gebruikt om het scheidingsteken in te stellen dat wordt gebruikt voor het extraheren van de tekenreeks.





Maak een C++-bestand met de volgende code om een ​​tekenreeks te splitsen op basis van het spatiescheidingsteken met behulp van de getlijn() functie. Een tekenreekswaarde van meerdere woorden is toegewezen aan een variabele en er is een spatie gebruikt als scheidingsteken. Er is een vectorvariabele gedeclareerd om de geëxtraheerde woorden op te slaan. Vervolgens is de 'for'-lus gebruikt om elke waarde uit de vectorarray af te drukken.

//Benodigde bibliotheken opnemen
#erbij betrekken
#erbij betrekken
#erbij betrekken
#erbij betrekken

inthoofd()
{
// Definieer tekenreeksgegevens die worden gesplitst
uur::snaarstrData= 'Leer C++ Programmeren';
// Definieer contante gegevens die als scheidingsteken zullen worden gebruikt
const charscheidingsteken= '';
//Definieer de dynamische arrayvariabele van strings
uur::vectoroutputArray;
//Construeer een stream van de string
uur::stringstreamstreamgegevens(strData);
/ *
Declareer stringvariabele die zal worden gebruikt
om gegevens op te slaan na splitsing
* /

uur::snaaruur;
/ *
De lus herhaalt de gesplitste gegevens en
voeg de gegevens in de array in
* /

terwijl (uur::getline(streamData, waarde, scheidingsteken)) {
outputArray.terugduwen(uur);
}
// Druk de gesplitste gegevens af
uur::kosten << 'De originele string is:' <<strData<<uur::eindel;
// Lees de array en druk de gesplitste gegevens af
uur::kosten << 'NDe waarden na het splitsen van de tekenreeks op basis van spatie:' <<uur::eindel;
voor (auto &uur:outputArray) {
uur::kosten <<uur<<uur::eindel;
}
opbrengst 0;
}

Uitgang:



De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande code.

String splitsen met de functie strtok()

De functie strtok() kan worden gebruikt om een ​​string te splitsen door het deel van de string te tokeniseren op basis van een scheidingsteken. Het retourneert een aanwijzer naar het volgende token als het bestaat; anders wordt een NULL-waarde geretourneerd. De string.h header-bestand is vereist om deze functie te gebruiken. Een lus vereist het lezen van alle gesplitste waarden van de tekenreeks. Het eerste argument bevat de tekenreekswaarde die wordt geparseerd en het tweede argument bevat het scheidingsteken dat wordt gebruikt om het token te genereren. De syntaxis van deze functie wordt hieronder gegeven.

Syntaxis:

char * strtok ( char *str,const char *scheidingstekens);

Maak een C++-bestand met de volgende code om een ​​tekenreeks te splitsen met de functie strtok(). In de code wordt een reeks tekens gedefinieerd met een dubbele punt (':') als scheidingsteken. Volgende, de slag() functie wordt aangeroepen met de tekenreekswaarde en het scheidingsteken om het eerste token te genereren. De ' terwijl ’ lus is gedefinieerd om de andere tokens en de tokenwaarden te genereren totdat de NUL waarde wordt gevonden.

//Benodigde bibliotheken opnemen
#erbij betrekken
#erbij betrekken

inthoofd()
{
//Declareer een reeks tekens
charstrArray[] = 'Mehrab Hossain :IT Professional : [email protected] :+8801726783423';
//Retourneer de eerste tokenwaarde op basis van ':'
char *tokenWaarde= strtok(strArray,':');
// Initialiseer de tellervariabele
intbalie= 1;
/ *
Herhaal de lus om de tokenwaarde af te drukken
en splits de resterende stringgegevens om te krijgen
de volgende symbolische waarde
* /

terwijl (tokenWaarde!= NUL)
{
indien(balie== 1)
printf('Naam: %sN', tokenWaarde);
anders indien(balie== 2)
printf('Beroep : %sN', tokenWaarde);
anders indien(balie== 3)
printf('E-mail: %sN', tokenWaarde);
anders
printf('Mobiel nr. : %sN', tokenWaarde);
tokenWaarde= strtok(NUL,':');
balie++;
}
opbrengst 0;
}

Uitgang:

De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande code.

String splitsen met de functies find() en erase()

De string kan in C++ worden gesplitst met de functies find() en erase(). Maak een C++-bestand met de volgende code om het gebruik van de functies find() en erase() te controleren om een ​​tekenreekswaarde te splitsen op basis van een bepaald scheidingsteken. De tokenwaarde wordt gegenereerd door de positie van het scheidingsteken te vinden met behulp van de functie find() en de tokenwaarde wordt opgeslagen nadat het scheidingsteken is verwijderd met de functie wissen(). Deze taak wordt herhaald totdat de volledige inhoud van de tekenreeks is geparseerd. Vervolgens worden de waarden van de vectorarray afgedrukt.

//Benodigde bibliotheken opnemen
#erbij betrekken
#erbij betrekken
#erbij betrekken

inthoofd(){
//Definieer de tekenreeks
uur::snaarstringData= 'Bangladesh en Japan en Duitsland en Brazilië';
//Definieer het scheidingsteken
uur::snaarscheidingsteken= 'en';
//Declareer de vectorvariabele
uur::vectorland{};
//Declareer integer-variabele
intpositie;
//Declareer stringvariabele
uur::snaaroutstr, token;

/ *
Splits de string met de functie substr()
en het gesplitste woord toevoegen aan de vector
* /

terwijl ((positie=tekenreeksData.vind(scheidingsteken)) !=uur::snaar::npos) {
token=tekenreeksData.substr(0, positie);
//Verwijder de extra spatie aan de voorkant van de gesplitste string
land.terugduwen(teken.wissen(0, teken.find_first_not_of('')));
tekenreeksData.wissen(0, positie+scheidingsteken.lengte());
}
// Print alle gesplitste woorden behalve de laatste
voor (const auto &outstr:land) {
uur::kosten <<outstr<<uur::eindel;
}
// Druk het laatste gesplitste woord af
uur::kosten <<tekenreeksData.wissen(0, stringData.find_first_not_of('')) <<uur::eindel;
opbrengst 0;
}

Uitgang:

De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande code.

Conclusie

Drie verschillende manieren om een ​​string in C++ te splitsen zijn in deze tutorial uitgelegd aan de hand van eenvoudige voorbeelden om de nieuwe python-gebruikers te helpen de splitsingsbewerking gemakkelijk uit te voeren in C++.