Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2421 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Separateur dans un string

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Separateur dans un string

n°1355467
korben31
Posté le 27-04-2006 à 19:36:35  profilanswer
 

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.

mood
Publicité
Posté le 27-04-2006 à 19:36:35  profilanswer
 

n°1355485
karminator​98
Posté le 27-04-2006 à 19:50:28  profilanswer
 

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 :)

n°1355488
korben31
Posté le 27-04-2006 à 19:52:54  profilanswer
 

ok merci jvais esseyer :p

n°1355499
korben31
Posté le 27-04-2006 à 20:26:14  profilanswer
 

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. }

n°1355508
LePhasme
Les Belges domineront le monde
Posté le 27-04-2006 à 20:45:47  profilanswer
 

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

n°1362443
turn3r
Un clavier azerty en vaut 2
Posté le 09-05-2006 à 15:01:53  profilanswer
 

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 !!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Separateur dans un string

 

Sujets relatifs
[JSP/Servlet] Comment envoyer une string sans passer par des javabean[C#] String contient string ?
Comparaison string avec un caractère ..... [REGLE]Conversion String en Hexa ("1F") vers byte
arraylist transtypage cast object string int (help please)javascript: tableau à partir d'un string
Probleme conso mémoire string (libstdc++)Lecture dans un fichier texte avec separateur , ??
[Resolu] Recherche d'occurences dans une variable Stringle point par défaut comme séparateur?
Plus de sujets relatifs à : Separateur dans un string


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR