logo

Hvordan dele en streng i C/C++, Python og Java?

Å dele en streng med en skilletegn er en veldig vanlig oppgave. For eksempel har vi en kommadelt liste over elementer fra en fil, og vi vil ha individuelle elementer i en matrise.
Nesten alle programmeringsspråk har en funksjon som deler en streng med en skilletegn.

I C:

// Splits str[] according to given delimiters. // and returns next token. It needs to be called // in a loop to get all tokens. It returns NULL // when there are no more tokens. char * strtok(char str[], const char *delims);>

C








// A C/C++ program for splitting a string> // using strtok()> #include> #include> int> main()> {> >char> str[] =>'Geeks-for-Geeks'>;> >// Returns first token> >char> *token =>strtok>(str,>'-'>);> > >// Keep printing tokens while one of the> >// delimiters present in str[].> >while> (token != NULL)> >{> >printf>(>'%s '>, token);> >token =>strtok>(NULL,>'-'>);> >}> >return> 0;> }>



>

arraylist og linkedlist

>

Output: Geeks for Geeks>

Tidskompleksitet: På)

Hjelpeplass: På)

I C++

Note: The main disadvantage of strtok() is that it only works for C style strings. Therefore we need to explicitly convert C++ string into a char array. Many programmers are unaware that C++ has two additional APIs which are more elegant and works with C++ string.>

Metode 1: Bruker stringstream API av C++

Forutsetning : strengstrøm API

Stringstream-objekt kan initialiseres ved hjelp av et strengobjekt, det automatisk tokeniserer strenger på romrøye. Akkurat som cin stream lar stringstream deg lese en streng som en strøm av ord. Alternativt kan vi også bruke getline-funksjonen til å tokenisere streng på et hvilket som helst enkelttegnsskilletegn .

Some of the Most Common used functions of StringStream. clear() — flushes the stream str() — converts a stream of words into a C++ string object. operator <<— pushes a string object into the stream. operator>> — trekker ut et ord fra strømmen.>

Koden nedenfor demonstrerer det.

C++




#include> using> namespace> std;> // A quick way to split strings separated via spaces.> void> simple_tokenizer(string s)> {> >stringstream ss(s);> >string word;> >while> (ss>> ord) {> >cout << word << endl;> >}> }> // A quick way to split strings separated via any character> // delimiter.> void> adv_tokenizer(string s,>char> del)> {> >stringstream ss(s);> >string word;> >while> (!ss.eof()) {> >getline(ss, word, del);> >cout << word << endl;> >}> }> int> main(>int> argc,>char> const>* argv[])> {> >string a =>'How do you do!'>;> >string b =>'How$do$you$do!'>;> >// Takes only space separated C++ strings.> >simple_tokenizer(a);> >cout << endl;> >adv_tokenizer(b,>'$'>);> >cout << endl;> >return> 0;> }>

>

>

Output : How do you do!>

Tidskompleksitet: O(n)

Auxiliary Space:O(n)

Hvor n er lengden på inndatastrengen.

Metode 2: Bruke C++ find() og substr() APIer.

Forutsetning: finne funksjon og substr() .

Denne metoden er mer robust og kan analysere en streng med et hvilket som helst skilletegn , ikke bare mellomrom (selv om standardoppførselen er å skille på mellomrom.) Logikken er ganske enkel å forstå fra koden nedenfor.

C++




#include> using> namespace> std;> void> tokenize(string s, string del =>' '>)> {> >int> start, end = -1*del.size();> >do> {> >start = end + del.size();> >end = s.find(del, start);> >cout << s.substr(start, end - start) << endl;> >}>while> (end != -1);> }> int> main(>int> argc,>char> const>* argv[])> {> >// Takes C++ string with any separator> >string a =>'How$%do$%you$%do$%!'>;> >tokenize(a,>'$%'>);> >cout << endl;> >return> 0;> }>

faktoriell i c

>

>

Output: How do you do !>

Tidskompleksitet: O(n)

Auxiliary Space:O(1)

Hvor n er lengden på inndatastrengen.

Metode 3: Bruke midlertidig streng

Hvis du får oppgitt at lengden på skilletegnet er 1, kan du ganske enkelt bruke en midlertidig streng for å dele strengen. Dette vil spare funksjonens overheadtid i tilfelle av metode 2.

C++




#include> using> namespace> std;> void> split(string str,>char> del){> >// declaring temp string to store the curr 'word' upto del> >string temp =>''>;> > >for>(>int> i=0; i<(>int>)str.size(); i++){> >// If cur char is not del, then append it to the cur 'word', otherwise> >// you have completed the word, print it, and start a new word.> >if>(str[i] != del){> >temp += str[i];> >}> >else>{> >cout << temp <<>' '>;> >temp =>''>;> >}> >}> > >cout << temp;> }> int> main() {> >string str =>'geeks_for_geeks'>;>// string to be split> >char> del =>'_'>;>// delimiter around which string is to be split> > >split(str, del);> > >return> 0;> }>

>

>

Produksjon

geeks for geeks>

Tidskompleksitet: På)

Hjelpeplass: På)

I Java:
I Java er split() en metode i String-klassen.

while og do while loop i java
// expregexp is the delimiting regular expression; // limit is the number of returned strings public String[] split (String regexp, int limit); // We can call split() without limit also public String[] split (String regexp)>

Java




// A Java program for splitting a string> // using split()> import> java.io.*;> public> class> Test> {> >public> static> void> main(String args[])> >{> >String Str =>new> String(>'Geeks-for-Geeks'>);> >// Split above string in at-most two strings> >for> (String val: Str.split(>'-'>,>2>))> >System.out.println(val);> >System.out.println(>''>);> > >// Splits Str into all possible tokens> >for> (String val: Str.split(>'-'>))> >System.out.println(val);> >}> }>

>

>

Produksjon:

Geeks for-Geeks Geeks for Geeks>

Tidskompleksitet: På)
Hjelpeplass: O(1)

I Python:
Split()-metoden i Python returnerer en liste over strenger etter å ha brutt den gitte strengen med den angitte skilletegn.

 // regexp is the delimiting regular expression; // limit is limit the number of splits to be made str. split (regexp = '', limit = string.count(str))>

Python3




line>=> 'Geek1 Geek2 Geek3'> print>(line.split())> print>(line.split(>' '>,>1>))>

>

>

Produksjon:

['Geek1', 'Geek2', 'Geek3'] ['Geek1', '
Geek2 
Geek3']>

Tidskompleksitet: O(N) , siden den bare går gjennom strengen og finner alle mellomrom.

Hjelpeområde: O(1) , siden det ikke er brukt ekstra plass.