Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- #include <string>
- using namespace std;
- int main()
- {
- string s("Somewhere down the road");
- istringstream iss(s);
- do
- {
- string sub;
- iss >> sub;
- cout << "Substring: " << sub << endl;
- } while (iss);
- }
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <algorithm>
- #include <iterator>
- int main() {
- using namespace std;
- string sentence = "And I feel fine...";
- istringstream iss(sentence);
- copy(istream_iterator<string>(iss),
- istream_iterator<string>(),
- ostream_iterator<string>(cout, "n"));
- }
- vector<string> tokens;
- copy(istream_iterator<string>(iss),
- istream_iterator<string>(),
- back_inserter(tokens));
- vector<string> tokens{istream_iterator<string>{iss},
- istream_iterator<string>{}};
- #include <boost/algorithm/string.hpp>
- std::vector<std::string> strs;
- boost::split(strs, "string to split", boost::is_any_of("t "));
- #include <vector>
- #include <string>
- #include <sstream>
- using namespace std;
- int main()
- {
- string str("Split me by whitespaces");
- string buf; // Have a buffer string
- stringstream ss(str); // Insert the string into a stream
- vector<string> tokens; // Create vector to hold our words
- while (ss >> buf)
- tokens.push_back(buf);
- }
- template < class ContainerT >
- void tokenize(const std::string& str, ContainerT& tokens,
- const std::string& delimiters = " ", bool trimEmpty = false)
- {
- std::string::size_type pos, lastPos = 0;
- using value_type = typename ContainerT::value_type;
- using size_type = typename ContainerT::size_type;
- while(true)
- {
- pos = str.find_first_of(delimiters, lastPos);
- if(pos == std::string::npos)
- {
- pos = str.length();
- if(pos != lastPos || !trimEmpty)
- tokens.push_back(value_type(str.data()+lastPos,
- (size_type)pos-lastPos ));
- break;
- }
- else
- {
- if(pos != lastPos || !trimEmpty)
- tokens.push_back(value_type(str.data()+lastPos,
- (size_type)pos-lastPos ));
- }
- lastPos = pos + 1;
- }
- }
- string line = "a line of text to iterate through";
- string word;
- istringstream iss(line, istringstream::in);
- while( iss >> word )
- {
- ...
- }
- #include <iostream>
- #include <string>
- #include <boost/foreach.hpp>
- #include <boost/tokenizer.hpp>
- using namespace std;
- using namespace boost;
- int main(int argc, char** argv)
- {
- string text = "token testtstring";
- char_separator<char> sep(" t");
- tokenizer<char_separator<char> > tokens(text, sep);
- BOOST_FOREACH(string t, tokens)
- {
- cout << t << "." << endl;
- }
- }
- void split(vector<string> &tokens, const string &text, char sep) {
- int start = 0, end = 0;
- while ((end = text.find(sep, start)) != string::npos) {
- tokens.push_back(text.substr(start, end - start));
- start = end + 1;
- }
- tokens.push_back(text.substr(start));
- }
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <iterator>
- using namespace std;
- vector<string> split(const string& s, const string& delim, const bool keep_empty = true) {
- vector<string> result;
- if (delim.empty()) {
- result.push_back(s);
- return result;
- }
- string::const_iterator substart = s.begin(), subend;
- while (true) {
- subend = search(substart, s.end(), delim.begin(), delim.end());
- string temp(substart, subend);
- if (keep_empty || !temp.empty()) {
- result.push_back(temp);
- }
- if (subend == s.end()) {
- break;
- }
- substart = subend + delim.size();
- }
- return result;
- }
- int main() {
- const vector<string> words = split("So close no matter how far", " ");
- copy(words.begin(), words.end(), ostream_iterator<string>(cout, "n"));
- }
- template<typename Operator>
- void tokenize(Operator& op, const char* input, const char* delimiters) {
- const char* s = input;
- const char* e = s;
- while (*e != 0) {
- e = s;
- while (*e != 0 && strchr(delimiters, *e) == 0) ++e;
- if (e - s > 0) {
- op(s, e - s);
- }
- s = e + 1;
- }
- }
- template<class ContainerType>
- class Appender {
- public:
- Appender(ContainerType& container) : container_(container) {;}
- void operator() (const char* s, unsigned length) {
- container_.push_back(std::string(s,length));
- }
- private:
- ContainerType& container_;
- };
- std::vector<std::string> strVector;
- Appender v(strVector);
- tokenize(v, "A number of words to be tokenized", " t");
- class WordCounter {
- public:
- WordCounter() : noOfWords(0) {}
- void operator() (const char*, unsigned) {
- ++noOfWords;
- }
- unsigned noOfWords;
- };
- WordCounter wc;
- tokenize(wc, "A number of words to be counted", " t");
- ASSERT( wc.noOfWords == 7 );
- void Tokenize(const string& str,
- vector<string>& tokens,
- const string& delimiters = " ")
- {
- // Skip delimiters at beginning.
- string::size_type lastPos = str.find_first_not_of(delimiters, 0);
- // Find first "non-delimiter".
- string::size_type pos = str.find_first_of(delimiters, lastPos);
- while (string::npos != pos || string::npos != lastPos)
- {
- // Found a token, add it to the vector.
- tokens.push_back(str.substr(lastPos, pos - lastPos));
- // Skip delimiters. Note the "not_of"
- lastPos = str.find_first_not_of(delimiters, pos);
- // Find next "non-delimiter"
- pos = str.find_first_of(delimiters, lastPos);
- }
- }
- template<typename T>
- vector<T>
- split(const T & str, const T & delimiters) {
- vector<T> v;
- T::size_type start = 0;
- auto pos = str.find_first_of(delimiters, start);
- while(pos != T::npos) {
- if(pos != start) // ignore empty tokens
- v.emplace_back(str, start, pos - start);
- start = pos + 1;
- pos = str.find_first_of(delimiters, start);
- }
- if(start < str.length()) // ignore trailing delimiter
- v.emplace_back(str, start, str.length() - start); // add what's left of the string
- return v;
- }
- vector<string> v = split<string>("Hello, there; World", ";,");
- vector<wstring> v = split<wstring>(L"Hello, there; World", L";,");
- #include <iostream>
- #include <vector>
- #include <boost/algorithm/string.hpp>
- template<typename _OutputIterator>
- inline void split(
- const std::string& str,
- const std::string& delim,
- _OutputIterator result)
- {
- using namespace boost::algorithm;
- typedef split_iterator<std::string::const_iterator> It;
- for(It iter=make_split_iterator(str, first_finder(delim, is_equal()));
- iter!=It();
- ++iter)
- {
- *(result++) = boost::copy_range<std::string>(*iter);
- }
- }
- int main(int argc, char* argv[])
- {
- using namespace std;
- vector<string> splitted;
- split("HelloFOOworldFOO!", "FOO", back_inserter(splitted));
- // or directly to console, for example
- split("HelloFOOworldFOO!", "FOO", ostream_iterator<string>(cout, "n"));
- return 0;
- }
- char sep = ' ';
- std::string s="1 This is an example";
- for(size_t p=0, q=0; p!=s.npos; p=q)
- std::cout << s.substr(p+(p!=0), (q=s.find(sep, p+1))-p-(p!=0)) << std::endl;
- #include<string>
- using namespace std;
- vector<string> split(char* str,const char* delim)
- {
- char* saveptr;
- char* token = strtok_r(str,delim,&saveptr);
- vector<string> result;
- while(token != NULL)
- {
- result.push_back(token);
- token = strtok_r(NULL,delim,&saveptr);
- }
- return result;
- }
- #include <iostream>
- #include <string>
- int main()
- {
- std::string s("Somewhere down the road");
- std::string::size_type prev_pos = 0, pos = 0;
- while( (pos = s.find(' ', pos)) != std::string::npos )
- {
- std::string substring( s.substr(prev_pos, pos-prev_pos) );
- std::cout << substring << 'n';
- prev_pos = ++pos;
- }
- std::string substring( s.substr(prev_pos, pos-prev_pos) ); // Last word
- std::cout << substring << 'n';
- }
- static void Split(std::vector<std::string>& lst, const std::string& input, const std::string& separators, bool remove_empty = true)
- {
- std::ostringstream word;
- for (size_t n = 0; n < input.size(); ++n)
- {
- if (std::string::npos == separators.find(input[n]))
- word << input[n];
- else
- {
- if (!word.str().empty() || !remove_empty)
- lst.push_back(word.str());
- word.str("");
- }
- }
- if (!word.str().empty() || !remove_empty)
- lst.push_back(word.str());
- }
- #include <vector>
- #include <iostream>
- #include <string.h>
- using namespace std;
- class StringSplit
- {
- private:
- void copy_fragment(char*,char*,char*);
- void copy_fragment(char*,char*,char);
- bool match_fragment(char*,char*,int);
- int untilnextdelim(char*,char);
- int untilnextdelim(char*,char*);
- void assimilate(char*,char);
- void assimilate(char*,char*);
- bool string_contains(char*,char*);
- long calc_string_size(char*);
- void copy_string(char*,char*);
- public:
- vector<char*> split_cstr(char);
- vector<char*> split_cstr(char*);
- vector<string> split_string(char);
- vector<string> split_string(char*);
- char* String;
- bool do_string;
- bool keep_empty;
- vector<char*> Container;
- vector<string> ContainerS;
- StringSplit(char * in)
- {
- String = in;
- }
- StringSplit(string in)
- {
- size_t len = calc_string_size((char*)in.c_str());
- String = new char[len+1];
- memset(String,0,len+1);
- copy_string(String,(char*)in.c_str());
- do_string = true;
- }
- ~StringSplit()
- {
- for(int i = 0;i<Container.size();i++)
- if(Container[i]!=NULL)
- delete[] Container[i];
- if(do_string)
- delete[] String;
- }
- #include <string.h>
- #include <iostream>
- #include <vector>
- #include "StringSplit.hpp"
- using namespace std;
- void StringSplit::assimilate(char*src,char delim)
- {
- int until = untilnextdelim(src,delim);
- if(until>0)
- {
- char * temp = new char[until+1];
- memset(temp,0,until+1);
- copy_fragment(temp,src,delim);
- if(keep_empty||*temp!=0)
- {
- if(!do_string)
- {
- Container.push_back(temp);
- }
- else
- {
- string x = temp;
- ContainerS.push_back(x);
- }
- }
- else
- {
- delete[] temp;
- }
- }
- }
- void StringSplit::assimilate(char*src,char* delim)
- {
- int until = untilnextdelim(src,delim);
- if(until>0)
- {
- char * temp = new char[until+1];
- memset(temp,0,until+1);
- copy_fragment(temp,src,delim);
- if(keep_empty||*temp!=0)
- {
- if(!do_string)
- {
- Container.push_back(temp);
- }
- else
- {
- string x = temp;
- ContainerS.push_back(x);
- }
- }
- else
- {
- delete[] temp;
- }
- }
- }
- long StringSplit::calc_string_size(char* _in)
- {
- long i = 0;
- while(*_in++)
- i++;
- return i;
- }
- bool StringSplit::string_contains(char*haystack,char*needle)
- {
- size_t len = calc_string_size(needle);
- size_t lenh = calc_string_size(haystack);
- while(lenh--)
- if(match_fragment(haystack+lenh,needle,len))
- return true;
- return false;
- }
- bool StringSplit::match_fragment(char* _src, char*cmp,int len)
- {
- while(len--)
- if(*(_src+len)!=*(cmp+len))
- return false;
- return true;
- }
- int StringSplit::untilnextdelim(char* _in, char delim)
- {
- size_t len = calc_string_size(_in);
- if(*_in==delim)
- {
- _in += 1;
- return len-1;
- }
- int c = 0;
- while(*(_in+c)!=delim&&c<len)
- c++;
- return c;
- }
- int StringSplit::untilnextdelim(char* _in, char* delim)
- {
- int s = calc_string_size(delim);
- int c = 1 + s;
- if(!string_contains(_in,delim))
- {
- return calc_string_size(_in);
- }
- else if(match_fragment(_in,delim,s))
- {
- _in+=s;
- return calc_string_size(_in);
- }
- while(!match_fragment(_in+c,delim,s))
- c++;
- return c;
- }
- void StringSplit::copy_fragment(char*dest,char*src,char delim)
- {
- if(*src==delim)
- src++;
- int c = 0;
- while(*(src+c) != delim && *(src+c))
- {
- *(dest+c) = *(src+c);
- c++;
- }
- *(dest+c)=0;
- }
- void StringSplit::copy_string(char*dest,char*src)
- {
- int i = 0;
- while(*(src+i))
- {
- *(dest+i) = *(src+i);
- i++;
- }
- }
- void StringSplit::copy_fragment(char*dest,char*src,char*delim)
- {
- size_t len = calc_string_size(delim);
- size_t lens = calc_string_size(src);
- if(match_fragment(src,delim,len))
- {
- src += len;
- lens -= len;
- }
- int c = 0;
- while(!match_fragment(src+c,delim,len) && c<lens)
- {
- *(dest+c) = *(src+c);
- c++;
- }
- *(dest+c)=0;
- }
- vector<char*> StringSplit::split_cstr(char Delimiter)
- {
- int i = 0;
- while(*String)
- {
- if(*String!=Delimiter && i == 0)
- assimilate(String,Delimiter);
- if(*String==Delimiter)
- assimilate(String,Delimiter);
- i++;
- String++;
- }
- String -= i;
- delete[] String;
- return Container;
- }
- vector<string> StringSplit::split_string(char Delimiter)
- {
- do_string = true;
- int i = 0;
- while(*String)
- {
- if(*String!=Delimiter && i == 0)
- assimilate(String,Delimiter);
- if(*String==Delimiter)
- assimilate(String,Delimiter);
- i++;
- String++;
- }
- String -= i;
- delete[] String;
- return ContainerS;
- }
- vector<char*> StringSplit::split_cstr(char* Delimiter)
- {
- int i = 0;
- size_t LenDelim = calc_string_size(Delimiter);
- while(*String)
- {
- if(!match_fragment(String,Delimiter,LenDelim) && i == 0)
- assimilate(String,Delimiter);
- if(match_fragment(String,Delimiter,LenDelim))
- assimilate(String,Delimiter);
- i++;
- String++;
- }
- String -= i;
- delete[] String;
- return Container;
- }
- vector<string> StringSplit::split_string(char* Delimiter)
- {
- do_string = true;
- int i = 0;
- size_t LenDelim = calc_string_size(Delimiter);
- while(*String)
- {
- if(!match_fragment(String,Delimiter,LenDelim) && i == 0)
- assimilate(String,Delimiter);
- if(match_fragment(String,Delimiter,LenDelim))
- assimilate(String,Delimiter);
- i++;
- String++;
- }
- String -= i;
- delete[] String;
- return ContainerS;
- }
- int main(int argc, char*argv[])
- {
- StringSplit ss = "This:CUT:is:CUT:an:CUT:example:CUT:cstring";
- vector<char*> Split = ss.split_cstr(":CUT:");
- for(int i = 0;i<Split.size();i++)
- cout << Split[i] << endl;
- return 0;
- }
- int main(int argc, char*argv[])
- {
- StringSplit ss = "This:is:an:example:cstring";
- vector<char*> Split = ss.split_cstr(':');
- for(int i = 0;i<Split.size();i++)
- cout << Split[i] << endl;
- return 0;
- }
- int main(int argc, char*argv[])
- {
- string mystring = "This[SPLIT]is[SPLIT]an[SPLIT]example[SPLIT]string"
- StringSplit ss = mystring;
- vector<string> Split = ss.split_string("[SPLIT]");
- for(int i = 0;i<Split.size();i++)
- cout << Split[i] << endl;
- return 0;
- }
- int main(int argc, char*argv[])
- {
- string mystring = "This|is|an|example|string"
- StringSplit ss = mystring;
- vector<string> Split = ss.split_string('|');
- for(int i = 0;i<Split.size();i++)
- cout << Split[i] << endl;
- return 0;
- }
- StringSplit ss = mystring;
- ss.keep_empty = true;
- vector<string> Split = ss.split_string(":DELIM:");
- String[] Split = "Hey:cut:what's:cut:your:cut:name?".Split(new[]{":cut:"},StringSplitOptions.None);
- foreach(String X in Split)
- Write(X);
- #include <regex.h>
- #include <string.h>
- #include <vector.h>
- using namespace std;
- vector<string> split(string s){
- regex r ("\w+"); //regex matches whole words, (greedy, so no fragment words)
- regex_iterator<string::iterator> rit ( s.begin(), s.end(), r );
- regex_iterator<string::iterator> rend; //iterators to iterate thru words
- vector<string> result<regex_iterator>(rit, rend);
- return result; //iterates through the matches to fill the vector
- }
- #include <iostream>
- #include <vector>
- #include <string>
- #include <strtk.hpp>
- const char *whitespace = " trnf";
- const char *whitespace_and_punctuation = " trnf;,=";
- int main()
- {
- { // normal parsing of a string into a vector of strings
- std::string s("Somewhere down the road");
- std::vector<std::string> result;
- if( strtk::parse( s, whitespace, result ) )
- {
- for(size_t i = 0; i < result.size(); ++i )
- std::cout << result[i] << std::endl;
- }
- }
- { // parsing a string into a vector of floats with other separators
- // besides spaces
- std::string s("3.0, 3.14; 4.0");
- std::vector<float> values;
- if( strtk::parse( s, whitespace_and_punctuation, values ) )
- {
- for(size_t i = 0; i < values.size(); ++i )
- std::cout << values[i] << std::endl;
- }
- }
- { // parsing a string into specific variables
- std::string s("angle = 45; radius = 9.9");
- std::string w1, w2;
- float v1, v2;
- if( strtk::parse( s, whitespace_and_punctuation, w1, v1, w2, v2) )
- {
- std::cout << "word " << w1 << ", value " << v1 << std::endl;
- std::cout << "word " << w2 << ", value " << v2 << std::endl;
- }
- }
- return 0;
- }
- void split_string(string text,vector<string>& words)
- {
- int i=0;
- char ch;
- string word;
- while(ch=text[i++])
- {
- if (isspace(ch))
- {
- if (!word.empty())
- {
- words.push_back(word);
- }
- word = "";
- }
- else
- {
- word += ch;
- }
- }
- if (!word.empty())
- {
- words.push_back(word);
- }
- }
- string s = "Name:JAck; Spouse:Susan; ...";
- string dummy, name, spouse;
- istringstream iss(s);
- getline(iss, dummy, ':');
- getline(iss, name, ';');
- getline(iss, dummy, ':');
- getline(iss, spouse, ';')
- #include <iostream>
- #include <string>
- #include <boost/regex.hpp>
- int main() {
- std::string line("A:::line::to:split");
- const boost::regex re(":+"); // one or more colons
- // -1 means find inverse matches aka split
- boost::sregex_token_iterator tokens(line.begin(),line.end(),re,-1);
- boost::sregex_token_iterator end;
- for (; tokens != end; ++tokens)
- std::cout << *tokens << std::endl;
- }
- #include <string>
- #include <vector>
- using namespace std;
- vector<string> split(string str, const char delim) {
- vector<string> v;
- string tmp;
- for(string::const_iterator i; i = str.begin(); i <= str.end(); ++i) {
- if(*i != delim && i != str.end()) {
- tmp += *i;
- } else {
- v.push_back(tmp);
- tmp = "";
- }
- }
- return v;
- }
- void splitString(const String &s, const String &delim, std::vector<String> &result) {
- const int l = delim.length();
- int f = 0;
- int i = s.indexOf(delim,f);
- while (i>=0) {
- String token( i-f > 0 ? s.substring(f,i-f) : "");
- result.push_back(token);
- f=i+l;
- i = s.indexOf(delim,f);
- }
- String token = s.substring(f);
- result.push_back(token);
- }
- #include <string>
- #include <list>
- #include <locale> // std::isupper
- template<class String>
- const std::list<String> split_camel_case_string(const String &s)
- {
- std::list<String> R;
- String w;
- for (String::const_iterator i = s.begin(); i < s.end(); ++i) { {
- if (std::isupper(*i)) {
- if (w.length()) {
- R.push_back(w);
- w.clear();
- }
- }
- w += *i;
- }
- if (w.length())
- R.push_back(w);
- return R;
- }
- #include <regex>
- #include <string>
- #include <vector>
- std::vector<string> Tokenize( const string str, const std::regex regex )
- {
- using namespace std;
- std::vector<string> result;
- sregex_token_iterator it( str.begin(), str.end(), regex, -1 );
- sregex_token_iterator reg_end;
- for ( ; it != reg_end; ++it ) {
- if ( !it->str().empty() ) //token could be empty:check
- result.emplace_back( it->str() );
- }
- return result;
- }
- std::vector<string> TokenizeDefault( const string str )
- {
- using namespace std;
- regex re( "[\s,]+" );
- return Tokenize( str, re );
- }
- #pragma once
- #include <vector>
- #include <sstream>
- using namespace std;
- class Helpers
- {
- public:
- static vector<string> split(string s, char delim)
- {
- stringstream temp (stringstream::in | stringstream::out);
- vector<string> elems(0);
- if (s.size() == 0 || delim == 0)
- return elems;
- for each(char c in s)
- {
- if(c == delim)
- {
- elems.push_back(temp.str());
- temp = stringstream(stringstream::in | stringstream::out);
- }
- else
- temp << c;
- }
- if (temp.str().size() > 0)
- elems.push_back(temp.str());
- return elems;
- }
- //Splits string s with a list of delimiters in delims (it's just a list, like if we wanted to
- //split at the following letters, a, b, c we would make delims="abc".
- static vector<string> split(string s, string delims)
- {
- stringstream temp (stringstream::in | stringstream::out);
- vector<string> elems(0);
- bool found;
- if(s.size() == 0 || delims.size() == 0)
- return elems;
- for each(char c in s)
- {
- found = false;
- for each(char d in delims)
- {
- if (c == d)
- {
- elems.push_back(temp.str());
- temp = stringstream(stringstream::in | stringstream::out);
- found = true;
- break;
- }
- }
- if(!found)
- temp << c;
- }
- if(temp.str().size() > 0)
- elems.push_back(temp.str());
- return elems;
- }
- };
- 0 <len:0>
- 1 PICK <len:4>
- 2 ANY <len:3>
- 3 TWO: <len:4>
- 4 <len:0>
- vector <string> split(const string& str, const string& delimiter = " ") {
- vector <string> tokens;
- string::size_type lastPos = 0;
- string::size_type pos = str.find(delimiter, lastPos);
- while (string::npos != pos) {
- // Found a token, add it to the vector.
- cout << str.substr(lastPos, pos - lastPos) << endl;
- tokens.push_back(str.substr(lastPos, pos - lastPos));
- lastPos = pos + delimiter.size();
- pos = str.find(delimiter, lastPos);
- }
- tokens.push_back(str.substr(lastPos, str.size() - lastPos));
- return tokens;
- }
- #include <boost/algorithm/string/split.hpp>
- #include <boost/algorithm/string.hpp>
- #include <iostream>
- #include <vector>
- using namespace std;
- using namespace boost;
- int main(int argc, char**argv) {
- typedef vector < string > list_type;
- list_type list;
- string line;
- line = "Somewhere down the road";
- split(list, line, is_any_of(" "));
- for(int i = 0; i < list.size(); i++)
- {
- cout << list[i] << endl;
- }
- return 0;
- }
- Somewhere
- down
- the
- road
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement