División de C ++ std :: string utilizando tokens, por ejemplo, “;”

¿La mejor manera de dividir una cadena en C ++? Se puede suponer que la cadena está compuesta de palabras separadas por el delimitador ; .

Desde el punto de vista de nuestras líneas guía, las funciones de cadena C no están permitidas y tampoco se permite el uso de Boost debido a problemas de seguridad. No se permite el código abierto.

La mejor solución que tengo ahora es:

 string str("denmark;sweden;india;us"); 

Por encima de str debe almacenar en vectores como cadenas. ¿Cómo podemos lograr esto?

Gracias por las entradas.

Encuentro que std::getline() es a menudo el más simple. El parámetro del delimitador opcional significa que no es solo para leer “líneas”:

 #include  #include  #include  using namespace std; int main() { vector strings; istringstream f("denmark;sweden;india;us"); string s; while (getline(f, s, ';')) { cout << s << endl; strings.push_back(s); } } 

Puede usar una secuencia de cadenas y leer los elementos en el vector.

Aquí hay muchos ejemplos diferentes …

Una copia de uno de los ejemplos:

 std::vector split(const std::string& s, char seperator) { std::vector output; std::string::size_type prev_pos = 0, pos = 0; while((pos = s.find(seperator, pos)) != std::string::npos) { std::string substring( s.substr(prev_pos, pos-prev_pos) ); output.push_back(substring); prev_pos = ++pos; } output.push_back(s.substr(prev_pos, pos-prev_pos)); // Last word return output; } 

Hay varias bibliotecas disponibles que resuelven este problema, pero la más simple es probablemente usar Boost Tokenizer:

 #include  #include  #include  #include  typedef boost::tokenizer > tokenizer; std::string str("denmark;sweden;india;us"); boost::char_separator sep(";"); tokenizer tokens(str, sep); BOOST_FOREACH(std::string const& token, tokens) { std::cout << "<" << *tok_iter << "> " << "\n"; }