StringTokenizer en C++ ???

StringTokenizer en C++ ??? - C++ - Programmation

Marsh Posté le 12-01-2006 à 14:59:01    

Hello,
 
J'aimerais reproduire le comportement de la classe StringTokenizer qui existe en Java en C++. En gros, recuperer les elements un a un d'une chaine composee successivement de separateur/valeur du type:
 

Code :
  1. std:string test = "001-002-003-";


 ou - est le separateur.
 
Existe-t-il une classe qui aurait le meme comportement dans la C++ std lib ou quelqu'un connait-il un moyen simple et optimise de faire cela?
 
Merci d'avance.
 
 

Reply

Marsh Posté le 12-01-2006 à 14:59:01   

Reply

Marsh Posté le 12-01-2006 à 15:33:55    

y en a dans boost je crois. Sinon tu peux découper avec un istringstream

Reply

Marsh Posté le 12-01-2006 à 15:35:30    

Reply

Marsh Posté le 12-01-2006 à 15:43:45    

Code :
  1. #include <boost/algorithm/string.hpp>
  2. #include <string>
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7. int main()
  8. {
  9.   vector<string> tokens;
  10.   boost::split(tokens, "foo bar baz", boost::is_any_of(" " ));
  11.   copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, "/" ));
  12.   cout << '\n';
  13. }

Reply

Marsh Posté le 12-01-2006 à 17:26:06    

Ok merci bcp Taz :)

Reply

Marsh Posté le 12-01-2006 à 17:50:30    

sinon

Code :
  1. void Tokenize(const string& str,
  2.                       vector<string>& tokens,
  3.                       const string& delimiters = " " )
  4. {
  5.     // Skip delimiters at beginning.
  6.     string::size_type lastPos = str.find_first_not_of(delimiters, 0);
  7.     // Find first "non-delimiter".
  8.     string::size_type pos     = str.find_first_of(delimiters, lastPos);
  9.     while (string::npos != pos || string::npos != lastPos)
  10.     {
  11.         // Found a token, add it to the vector.
  12.         tokens.push_back(str.substr(lastPos, pos - lastPos));
  13.         // Skip delimiters.  Note the "not_of"
  14.         lastPos = str.find_first_not_of(delimiters, pos);
  15.         // Find next "non-delimiter"
  16.         pos = str.find_first_of(delimiters, lastPos);
  17.     }
  18. }


 
trouvé sur:
http://oopweb.com/CPP/Documents/CP [...] WTO-7.html

Reply

Marsh Posté le 12-01-2006 à 20:54:34    

moui enfin boost::tokenizer quoi :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed