logo

Kaip padalinti eilutę C/C++, Python ir Java?

Eilutės padalijimas tam tikru skyrikliu yra labai dažna užduotis. Pavyzdžiui, turime kableliais atskirtą elementų sąrašą iš failo ir norime, kad masyve būtų atskiri elementai.
Beveik visose programavimo kalbose yra funkcija, padalijanti eilutę tam tikru skyrikliu.

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;> }>



>

reakcijos lentelė

>

Output: Geeks for Geeks>

Laiko sudėtingumas: O(n)

Pagalbinė erdvė: O(n)

C++ kalboje

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.>

1 būdas: Naudojant C++ stringstream API

Būtina sąlyga : styginių srautas API

Stringstream objektas gali būti inicijuotas naudojant eilutės objektą, jis automatiškai tokenizuoja eilutes tarpo char. Kaip ir cin stream stringstream leidžia skaityti eilutę kaip žodžių srautą. Arba taip pat galime naudoti funkciją getline, kad įjungtume eilutę bet koks vieno simbolio skyriklis .

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>> — ištraukia žodį iš srauto.>

Žemiau pateiktas kodas tai parodo.

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>> žodis) {> >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!>

Laiko sudėtingumas: O(n)

Pagalbinė erdvė: O(n)

Kur n yra įvesties eilutės ilgis.

2 metodas: C++ find() ir substr() API naudojimas.

Būtina sąlyga: rasti funkciją ir substr() .

Šis metodas yra tvirtesnis ir gali išanalizuoti eilutę su bet kokiu skyrikliu , ne tik tarpai (nors numatytasis elgesys yra atskirti tarpais.) Logiką gana paprasta suprasti iš toliau pateikto kodo.

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;> }>

>

>

Output: How do you do !>

Laiko sudėtingumas: O(n)

Pagalbinė erdvė: O(1)

Kur n yra įvesties eilutės ilgis.

3 būdas: laikinos eilutės naudojimas

Jei nurodoma, kad skyriklio ilgis yra 1, galite tiesiog naudoti laikinąją eilutę, kad padalintumėte eilutę. Tai sutaupys funkcijos papildomo laiko 2 metodo atveju.

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;> }>

>

document.queryselector
>

Išvestis

geeks for geeks>

Laiko sudėtingumas: O(n)

paleisti scenarijus Linux sistemoje

Pagalbinė erdvė: O(n)

Java:
„Java“ kalboje „split ()“ yra „String“ klasės metodas.

// 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);> >}> }>

>

>

Išvestis:

Geeks for-Geeks Geeks for Geeks>

Laiko sudėtingumas: O(n)
Pagalbinė erdvė: O(1)

Python:
„Python“ metodas „split()“ grąžina eilučių sąrašą, sulaužius nurodytą eilutę nurodytu skyrikliu.

 // 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>))>

>

>

Išvestis:

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

Laiko sudėtingumas: O(N) , nes jis tiesiog pereina per eilutę, surasdamas visas tarpas.

Pagalbinė erdvė: O(1) , nes nebuvo panaudota papildoma vieta.