Separateur dans un string

Separateur dans un string - C++ - Programmation

Marsh Posté le 27-04-2006 à 19:36:35    

Bonjour j'ai un string qui contient se genre d'information:
login:user:pass
et j'aimerai bien pouvoir mettre dans  un string commande login dans un string user le user et dans un string pass le pass en fonction du separateur  
Je n'ai pas trouvé de fonction de string permettant de le faire
Si quelqu'un a une solution elle est la bienvenue.

Reply

Marsh Posté le 27-04-2006 à 19:36:35   

Reply

Marsh Posté le 27-04-2006 à 19:50:28    

bon... c pas très compliqué... tu n'a qu'a utiliser un find avec tes : et faire des substrings avec le reste... je vais te montrer un exemple de ce que je veux dire...
 

Code :
  1. string toutLeTexte= "allo;salut;bonjour";
  2. int posPoint1= toutLeTexte.find(';',0);
  3. int posPoint2= toutLeTexte.find(';',posPoint1+1);
  4. string text1= toutLeTexte.substr(0,posPoint1);
  5. string text2= toutLeTexte.substr(posPoint1+1,posPoint2-(posPoint1+1));
  6. string text3= toutLeTexte.substr(posPoint2+1,toutLeTexte.size()-(posPoint2+1));


 
bonne chance :)

Reply

Marsh Posté le 27-04-2006 à 19:52:54    

ok merci jvais esseyer :p

Reply

Marsh Posté le 27-04-2006 à 20:26:14    

Code :
  1. #include "StdAfx.h"
  2. #include ".\commande.h"
  3. commande::commande(void)
  4. {
  5. }
  6. commande::~commande(void)
  7. {
  8. }
  9. // Selectionne la methode en fonction du message recus
  10. void commande::select(string msg)
  11. {
  12. int posPoint1 = msg.find(':',0);
  13. string commande= msg.substr(0,posPoint1);
  14. if(commande=="login" )
  15.  login(msg);
  16. if(commande=="getliste" )
  17.  getliste(msg);
  18. }
  19. // Fonction lancer lorsque le serveur recoi la commande getliste
  20. void commande::getliste(string msg)
  21. {
  22. /*** on vire les 6 premier caractere  "login:" ***/
  23. //msg.Remove(0,6);
  24. int posPoint1= msg.find(':',0);
  25. int posPoint2= msg.find(':',posPoint1+1);
  26.     string commande= msg.substr(0,posPoint1);
  27.     string arg1= msg.substr(posPoint1+1,posPoint2-(posPoint1+1));
  28.     string arg2= msg.substr(posPoint2+1,msg.size()-(posPoint2+1));
  29. cout << arg1 << endl <<  arg2 << endl;
  30. }
  31. // Fonction lancer lorsque le serveur recoi une demande de login
  32. void commande::login(string msg)
  33. {
  34. /*** on vire les 9 premier caractere  "getliste:" ***/
  35. //msg.Remove(0,9);
  36. }

Reply

Marsh Posté le 27-04-2006 à 20:45:47    

Il y a un problème ou tu postes juste pour donner la solution ?

Reply

Marsh Posté le 09-05-2006 à 15:01:53    

Le mieu pour faire ce que tu a a faire est d'utiliser la librairie c++ BOOST et sa fonction tokenizer
 
Le programme suivant illustre comment utiliser boost::tokenizer pour découper une chaîne de caractères selon des séparateurs par défaut, ou selon une liste de séparateurs bien précis :

Code :
  1. #include <iostream>
  2. #include <boost/tokenizer.hpp>
  3. // découpe la chaine avec les séparateurs par défaut
  4. void split( const std::string & Msg )
  5. {
  6.     // utiliser le tokenizer par défaut
  7.     boost::tokenizer<> tok( Msg );
  8.     // itérer la séquence de tokens
  9.     for ( boost::tokenizer<>::const_iterator i = tok.begin();
  10.           i != tok.end();
  11.           ++i )
  12.     {
  13.         // afficher chaque token extrait
  14.         std::cout << *i << '\n';
  15.     }
  16. }
  17. // découpe la chaine selon les séparateurs donnés
  18. void split( const std::string & Msg, const std::string & Separators )
  19. {
  20.     // typedef pour alléger l'écriture
  21.     typedef boost::tokenizer<boost::char_separator<char> > my_tok;
  22.     // séparateur personnalisé
  23.     boost::char_separator<char> sep( Separators.c_str() );
  24.     // construire le tokenizer personnalisé
  25.     my_tok tok( Msg, sep );
  26.     // itérer la séquence de tokens
  27.     for ( my_tok::const_iterator i = tok.begin();
  28.           i != tok.end();
  29.           ++i )
  30.     {
  31.         // afficher chaque token extrait
  32.         std::cout << *i << '\n';
  33.     }
  34. }
  35. int main()
  36. {
  37.     std::cout << "-- exemple 1 --\n";
  38.     split( "mot1;mot2;   ;mot3;;mot4;mot5;" );
  39.  
  40.     std::cout << "-- exemple 2 --\n";
  41.     split( "mot-compose1;mot,compose2;[mot][compose3];mot compose4;<mot><compose><5>", ";" );
  42. }


Ce programme produit le résultat suivant :
 
-- exemple 1 --
mot1
mot2
mot3
mot4
mot5
-- exemple 2 --
mot-compose1
mot,compose2
[mot][compose3]
mot compose4
<mot><compose><5>
 
Notez que les token vides (";;" par exemple) ne sont pas pris en compte.  


---------------
Les ventes de véhicules neufs ont chuté de 7%, y'en a marre des pirates qui téléchargent illégalement des voitures sur internet !!
Reply

Sujets relatifs:

Leave a Replay

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