Tu peux utiliser getline dans un stringstream. getline à un troisième argument pour spécifier le type de délimiteur (par défaut c'est \n). Mais on ne peut pas prendre plusieurs délimiteurs.
http://www.cplusplus.com/reference/string/getline/
La solution consiste à utiliser boost pour le faire. Il y a une méthode "split" qui permet de faire cela.
On lui donne les délimiteurs, et il se débrouille pour couper la chaîne. \s => " \n\t\v\r\f"
A noter que cet exemple n'est pas optimisé, car on créer un nouveau std::string pour chaque élément.
Si on veut juste avoir des références sur les éléments, il faut utiliser un: std::list<boost::iterator_range<std::string::iterator>> à la place d'un std::vector<std::string>.
Code C/C++ :
#include <iostream>
#include <vector>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string.hpp>
int main()
{
const std::string line = "Une ligne separee par des"
" espaces et es \n saut de lignes\n\n mutliples, ainsi que"
" \t\t des \ttabulations";
std::cout << line << std::endl;
std::vector<std::string> tab;
boost::split(tab, line, boost::algorithm::is_any_of(" \n\t\v\r\f"),
boost::token_compress_on);
for (std::vector<std::string>::const_iterator it = tab.begin();
it != tab.end(); ++it)
std::cout << "<" << *it << ">" << std::endl;
return 0;
}
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio