Kā sadalīt virkni C ++

How Split String C



Darbs ar virknes datiem ir būtiska jebkuras programmēšanas valodas sastāvdaļa. Dažreiz mums ir jāsadala virknes dati programmēšanas nolūkos. Funkcija split () pastāv daudzās programmēšanas valodās, lai virkni sadalītu vairākās daļās. C ++ nav iebūvēta split () funkcija virkņu sadalīšanai, bet C ++ ir daudz dažādu veidu, kā veikt vienu un to pašu uzdevumu, piemēram, getline () funkcija, strtok () funkcija, izmantojot atrast () un dzēst () funkcijas, uc Šo funkciju izmantošana, lai sadalītu virknes C ++, ir izskaidrota šajā apmācībā.

Priekšnosacījums

Pirms šīs apmācības piemēru pārbaudes jums jāpārbauda, ​​vai g ++ kompilators ir instalēts sistēmā vai nav. Ja izmantojat Visual Studio kodu, tad instalējiet nepieciešamos paplašinājumus, lai apkopotu C ++ avota kodu, lai izveidotu izpildāmo kodu. Šeit C ++ koda apkopošanai un izpildei izmantota lietojumprogramma Visual Studio Code.







Sadaliet virkni, izmantojot funkciju getline ()

Funkcija getline () tiek izmantota, lai lasītu rakstzīmes no virknes vai faila satura, līdz tiek atrasts noteikts atdalītājs vai atdalītājs, un katru parsēšanas virkni uzglabā citā virknes mainīgajā. Funkcija turpinās uzdevumu, līdz tiks parsēts viss virknes vai faila saturs. Šīs funkcijas sintakse ir parādīta zemāk.



Sintakse:



straume&getline(straume&ir, virkne&str.,charnorobežot);

Lūk, pirmais parametrs, straume, ir objekts, no kura tiks iegūtas rakstzīmes. Otrais parametrs ir virknes mainīgais, kas saglabās iegūto vērtību. Trešais parametrs tiek izmantots, lai iestatītu norobežotāju, kas tiks izmantots virknes iegūšanai.





Izveidojiet C ++ failu ar šādu kodu, lai sadalītu virkni, pamatojoties uz atstarpi, izmantojot getline () funkciju. Mainīgajam ir piešķirta vairāku vārdu virknes vērtība, un kā atdalītājs ir izmantota atstarpe. Izgūto vārdu glabāšanai ir deklarēts vektora mainīgais. Tālāk cilpa “for” ir izmantota, lai drukātu katru vērtību no vektoru masīva.

// Iekļaut nepieciešamās bibliotēkas
#iekļaut
#iekļaut
#iekļaut
#iekļaut

intgalvenais()
{
// Definējiet virknes datus, kas tiks sadalīti
stundas::virknestrData= 'Uzziniet C ++ programmēšanu';
// Definējiet kontanta datus, kas tiks izmantoti kā norobežotāji
konst charatdalītājs= '';
// Definējiet virkņu dinamiskā masīva mainīgo
stundas::vektorsoutputArray;
// Izveidojiet straumi no virknes
stundas::stīgu plūsmastreamData(strData);
/ *
Deklarējiet virknes mainīgo, kas tiks izmantots
lai saglabātu datus pēc sadalīšanas
* /

stundas::virknest;
/ *
Cilpa atkārtos sadalītos datus un
ievietojiet datus masīvā
* /

kamēr (stundas::getline(streamData, val, separator)) {
outputArray.atgrūst(st);
}
// Izdrukājiet sadalītos datus
stundas::izmaksas << 'Sākotnējā virkne ir šāda:' <<strData<<stundas::endl;
// Lasiet masīvu un izdrukājiet sadalītos datus
stundas::izmaksas << ' nVērtības pēc virknes sadalīšanas, pamatojoties uz atstarpi: ' <<stundas::endl;
priekš (auto &st:outputArray) {
stundas::izmaksas <<st<<stundas::endl;
}
atgriezties 0;
}

Izeja:



Pēc iepriekš minētā koda izpildes parādīsies šāda izvade.

Sadaliet virkni, izmantojot funkciju strtok ()

Funkciju strtok () var izmantot, lai sadalītu virkni, marķējot virknes daļu, pamatojoties uz norobežotāju. Tas atgriež rādītāju uz nākamo marķieri, ja tāds pastāv; pretējā gadījumā tas atgriež NULL vērtību. The virkne.h lai izmantotu šo funkciju, ir nepieciešams galvenes fails. Cilpai būs jānolasa visas virknes sadalītās vērtības. Pirmais arguments satur virknes vērtību, kas tiks parsēta, un otrais arguments satur norobežotāju, kas tiks izmantots marķiera ģenerēšanai. Šīs funkcijas sintakse ir parādīta zemāk.

Sintakse:

char * strtok ( char *str.,konst char *norobežotāji);

Izveidojiet C ++ failu ar šādu kodu, lai sadalītu virkni, izmantojot funkciju strtok (). Kodā ir definēts rakstzīmju masīvs, kura atdalītājs ir kols (“:”). Tālāk, strtok () funkcija tiek izsaukta ar virknes vērtību un norobežotāju, lai ģenerētu pirmo marķieri. “ kamēr Cilpa ir definēta, lai ģenerētu citus marķierus un marķiera vērtības līdz NULL vērtība ir atrasta.

// Iekļaut nepieciešamās bibliotēkas
#iekļaut
#iekļaut

intgalvenais()
{
// Deklarējiet rakstzīmju masīvu
charstrArray[] = 'Mehrab Hossain: IT profesionālis: [aizsargāts e -pasts]: +8801726783423';
// Atgriež pirmo marķiera vērtību, pamatojoties uz ':'
char *tokenValue= strtok(strArray,':');
// Inicializēt skaitītāja mainīgo
intskaitītājs= 1;
/ *
Atkārtojiet cilpu, lai izdrukātu marķiera vērtību
un sadaliet atlikušos virknes datus, lai iegūtu
nākamā marķiera vērtība
* /

kamēr (tokenValue!= NULL)
{
ja(skaitītājs== 1)
printf('Vārds: %s n', tokenValue);
citādi ja(skaitītājs== 2)
printf('Nodarbošanās: %s n', tokenValue);
citādi ja(skaitītājs== 3)
printf('E -pasts: %s n', tokenValue);
citādi
printf('Mobilā tālruņa numurs: %s n', tokenValue);
tokenValue= strtok(NULL,':');
skaitītājs++;
}
atgriezties 0;
}

Izeja:

Pēc iepriekš minētā koda izpildes parādīsies šāda izvade.

Sadaliet virkni, izmantojot funkcijas find () un erase ()

Virkni var sadalīt C ++, izmantojot funkcijas find () un erase (). Izveidojiet C ++ failu ar šādu kodu, lai pārbaudītu funkciju find () un erase () izmantošanu, lai sadalītu virknes vērtību, pamatojoties uz noteiktu atdalītāju. Žetona vērtība tiek ģenerēta, atrodot norobežotāja pozīciju, izmantojot funkciju find (), un marķiera vērtība tiks saglabāta pēc norobežotāja noņemšanas, izmantojot funkciju erase (). Šis uzdevums tiks atkārtots, līdz tiks parsēts viss virknes saturs. Tālāk tiks izdrukātas vektoru masīva vērtības.

// Iekļaut nepieciešamās bibliotēkas
#iekļaut
#iekļaut
#iekļaut

intgalvenais(){
// Definējiet virkni
stundas::virknestringData= 'Bangladeša un Japāna, Vācija un Brazīlija';
// Definējiet atdalītāju
stundas::virkneatdalītājs= 'un';
// Vektora mainīgā deklarēšana
stundas::vektorsvalsti{};
// Deklarēt veselu skaitļu mainīgo
intpozīciju;
// Deklarēt virknes mainīgo
stundas::virkneoutstr, token;

/ *
Sadaliet virkni, izmantojot funkciju substr ()
un sadalītā vārda pievienošana vektoram
* /

kamēr ((pozīciju=stringData.atrast(atdalītājs)) !=stundas::virkne::npos) {
žetons=stringData.apakšstr(0, pozīcija);
// Noņemiet papildu vietu sadalītās virknes priekšpusē
valsti.atgrūst(žetons.dzēst(0, žetons.atrast_pirmais_no_('')));
stringData.dzēst(0, pozīcija+atdalītājs.garums());
}
// Izdrukājiet visus sadalītos vārdus, izņemot pēdējo
priekš (konst auto &pārsp:valsti) {
stundas::izmaksas <<pārsp<<stundas::endl;
}
// Izdrukājiet pēdējo sadalīto vārdu
stundas::izmaksas <<stringData.dzēst(0, stringData.atrast_pirmais_no_('')) <<stundas::endl;
atgriezties 0;
}

Izeja:

Pēc iepriekš minētā koda izpildes parādīsies šāda izvade.

Secinājums

Šajā apmācībā ir izskaidroti trīs dažādi virknes sadalīšanas veidi C ++ versijā, izmantojot vienkāršus piemērus, lai palīdzētu jaunajiem python lietotājiem viegli veikt sadalīšanas operāciju C ++.