Jak rozdělit řetězec v C ++

How Split String C



Práce s řetězcovými daty je nezbytnou součástí každého programovacího jazyka. Někdy musíme pro účely programování rozdělit řetězcová data. Funkce split () existuje v mnoha programovacích jazycích k rozdělení řetězce na více částí. V C ++ neexistuje žádná vestavěná funkce split () pro dělení řetězce, ale v C ++ existuje mnoho způsobů, jak provádět stejný úkol, například pomocí getline () funkce, strtok () funkce, pomocí nalézt() a vymazat() funkce atd. Použití těchto funkcí k rozdělení řetězců v C ++ bylo vysvětleno v tomto kurzu.

Předpoklad

Před kontrolou příkladů tohoto kurzu musíte zkontrolovat, zda je kompilátor g ++ nainstalován nebo není v systému. Pokud používáte kód Visual Studio, nainstalujte potřebná rozšíření ke kompilaci zdrojového kódu C ++ a vytvořte spustitelný kód. Zde byla aplikace Visual Studio Code použita ke kompilaci a spuštění kódu C ++.







Rozdělte řetězec pomocí funkce getline ()

Funkce getline () se používá ke čtení znaků z řetězce nebo obsahu souboru, dokud není nalezen konkrétní oddělovač nebo oddělovač, a uloží každý řetězec analýzy do jiné řetězcové proměnné. Funkce bude pokračovat v úkolu, dokud nebude analyzován celý obsah řetězce nebo souboru. Syntaxe této funkce je uvedena níže.



Syntax:



istream&getline(istream&je, řetězec&str,chardelim);

Zde je první parametr, isstream, je objekt, ze kterého budou extrahovány znaky. Druhý parametr je řetězcová proměnná, která bude ukládat extrahovanou hodnotu. Třetí parametr slouží k nastavení oddělovače, který bude použit k extrahování řetězce.





Vytvořte soubor C ++ s následujícím kódem a rozdělte řetězec na základě oddělovače mezer pomocí getline () funkce. Do proměnné byla přiřazena řetězcová hodnota více slov a jako oddělovač byla použita mezera. Pro uložení extrahovaných slov byla deklarována vektorová proměnná. Dále smyčka „for“ použila k vytištění každé hodnoty z vektorového pole.

// Zahrňte potřebné knihovny
#zahrnout
#zahrnout
#zahrnout
#zahrnout

inthlavní()
{
// Definujte data řetězců, která budou rozdělena
hodiny::tětivastrData= 'Naučte se programovat v C ++';
// Definujte konstantní data, která budou fungovat jako oddělovač
konst charoddělovač= '';
// Definujte proměnnou dynamického pole řetězců
hodiny::vektoroutputArray;
// Vytvořte stream z řetězce
hodiny::stringstreamstreamData(strData);
/ *
Deklarujte proměnnou řetězce, která bude použita
k ukládání dat po rozdělení
* /

hodiny::tětivahod;
/ *
Smyčka bude iterovat rozdělená data a
vložte data do pole
* /

zatímco (hodiny::getline(streamData, val, separátor)) {
outputArray.zatlačit zpátky(hod);
}
// Vytiskněte rozdělená data
hodiny::náklady << 'Původní řetězec je:' <<strData<<hodiny::endl;
// Přečíst pole a vytisknout rozdělená data
hodiny::náklady << ' nHodnoty po rozdělení řetězce na základě mezery: ' <<hodiny::endl;
pro (auto &hod:outputArray) {
hodiny::náklady <<hod<<hodiny::endl;
}
vrátit se 0;
}

Výstup:



Po spuštění výše uvedeného kódu se zobrazí následující výstup.

Rozdělte řetězec pomocí funkce strtok ()

Funkci strtok () lze použít k rozdělení řetězce tokenizací části řetězce na základě oddělovače. Pokud existuje, vrátí ukazatel na další token; v opačném případě vrátí hodnotu NULL. The řetězec.h Pro použití této funkce je vyžadován soubor záhlaví. Smyčka bude vyžadovat čtení všech rozdělených hodnot z řetězce. První argument obsahuje hodnotu řetězce, která bude analyzována, a druhý argument obsahuje oddělovač, který bude použit ke generování tokenu. Syntaxe této funkce je uvedena níže.

Syntax:

char * strtok ( char *str,konst char *oddělovače);

Vytvořte soubor C ++ s následujícím kódem pro rozdělení řetězce pomocí funkce strtok (). V kódu je definováno pole znaků obsahující jako oddělovač dvojtečku („:“). Dále, strtok () funkce je volána s řetězcovou hodnotou a oddělovačem pro vygenerování prvního tokenu. ‚‘ zatímco ‘Smyčka je definována pro generování ostatních tokenů a hodnot tokenů do NULA hodnota je nalezena.

// Zahrňte potřebné knihovny
#zahrnout
#zahrnout

inthlavní()
{
// Deklarujte řadu znaků
charstrArray[] = „Mehrab Hossain: IT Professional: [email protected]: +8801726783423 ';
// Vrátí první hodnotu tokenu na základě ':'
char *tokenValue= strtok(strArray,':');
// Inicializujte proměnnou čítače
intčelit= 1;
/ *
Opakováním smyčky vytiskněte hodnotu tokenu
a rozdělte zbývající data řetězců, abyste je získali
další hodnota tokenu
* /

zatímco (tokenValue!= NULA)
{
-li(čelit== 1)
printf('Jméno: %s n', tokenValue);
jiný -li(čelit== 2)
printf('Povolání: %s n', tokenValue);
jiný -li(čelit== 3)
printf('E -mail: %s n', tokenValue);
jiný
printf(„Mobil č.: %S n', tokenValue);
tokenValue= strtok(NULA,':');
čelit++;
}
vrátit se 0;
}

Výstup:

Po spuštění výše uvedeného kódu se zobrazí následující výstup.

Rozdělte řetězec pomocí funkcí find () a erase ()

Řetězec lze v C ++ rozdělit pomocí funkcí find () a erase (). Vytvořte soubor C ++ s následujícím kódem a zkontrolujte použití funkcí find () a erase () k rozdělení řetězcové hodnoty na základě konkrétního oddělovače. Hodnota tokenu je generována vyhledáním polohy oddělovače pomocí funkce find () a hodnota tokenu bude uložena po odebrání oddělovače pomocí funkce erase (). Tento úkol se bude opakovat, dokud nebude analyzován celý obsah řetězce. Dále se vytisknou hodnoty vektorového pole.

// Zahrňte potřebné knihovny
#zahrnout
#zahrnout
#zahrnout

inthlavní(){
// Definujte řetězec
hodiny::tětivastringData= „Bangladéš a Japonsko, Německo a Brazílie“;
// Definujte oddělovač
hodiny::tětivaoddělovač= 'a';
// Deklarujte vektorovou proměnnou
hodiny::vektorzemě{};
// Deklarujte celočíselnou proměnnou
intpozice;
// Deklarujte proměnnou řetězce
hodiny::tětivaoutstr, token;

/ *
Rozdělte řetězec pomocí funkce substr ()
a přidání rozděleného slova do vektoru
* /

zatímco ((pozice=stringData.nalézt(oddělovač)) !=hodiny::tětiva::npos) {
žeton=stringData.substr(0, pozice);
// Odstraňte nadbytečnou mezeru z přední části rozděleného řetězce
země.zatlačit zpátky(žeton.vymazat(0, žeton.find_first_not_of('')));
stringData.vymazat(0, pozice+oddělovač.délka());
}
// Vytiskne všechna rozdělená slova kromě posledního
pro (konst auto &vnější:země) {
hodiny::náklady <<vnější<<hodiny::endl;
}
// Vytiskne poslední rozdělené slovo
hodiny::náklady <<stringData.vymazat(0, stringData.find_first_not_of('')) <<hodiny::endl;
vrátit se 0;
}

Výstup:

Po spuštění výše uvedeného kódu se zobrazí následující výstup.

Závěr

V tomto kurzu byly vysvětleny tři různé způsoby rozdělení řetězce v jazyce C ++ pomocí jednoduchých příkladů, které pomohou novým uživatelům pythonu snadno provést operaci rozdělení v jazyce C ++.