26 #include "stringutil.h"
30 unsigned strutil::split(
const std::string line_tv,
31 std::vector<std::string> & words_Vtr,
32 const std::string sep_tv,
33 const bool singlesep_bv )
37 if ( line_tv.empty() )
38 return words_Vtr.size();
42 const std::string & sep_t;
43 sepctrl(
const std::string & sep_tv ) : sep_t( sep_tv ) {}
46 inline bool isSep(
const char c )
const {
return( sep_t.find( c ) != std::string::npos ); }
48 inline bool isNonSep(
const char c )
const {
return( c && !isSep( c ) ); }
50 inline void skipSep(
const char *& p )
const {
while ( isSep( *p ) ) ++p; }
52 inline void skipNonSep(
const char *& p )
const {
while ( isNonSep( *p ) ) ++p; }
55 sepctrl sep_Ci( sep_tv );
57 const char * s_pci = line_tv.c_str();
59 const char * c_pci = s_pci;
64 if ( !singlesep_bv && sep_Ci.isSep( *c_pci ) )
66 sep_Ci.skipSep( c_pci );
69 for ( s_pci = c_pci; *s_pci; s_pci = c_pci )
71 sep_Ci.skipNonSep( c_pci );
72 words_Vtr.push_back( std::string( s_pci, c_pci - s_pci ) );
81 words_Vtr.push_back(
"" );
85 sep_Ci.skipSep( c_pci );
89 return words_Vtr.size();
94 ostream & operator<<( ostream & stream,
const wstring & text )
97 NCstring::RecodeFromWchar( text,
"UTF-8", &utf8text );
99 return stream << utf8text;