Comment traiter une chaine de caractères séparée par espaces (String)

Signaler
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011
-
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011
-
Bonjour à tous, j'ai un nouveau problème.
Je récupère une chaine de caractères dans un "string", et je souhaiterais extraire ceux-ci mot par mot en les replaçant dans des variables.

exemple :
char* dx,dy,dz;
string Trame;
Trame="-12 1 0 1";

dx="mot1";
dy="mot2";
dz="mot3"; etc...

int x,y,z;
x=atoi(dx)
y=atoi(dy)
z=atoi(dz)
- - - - - - - - - -
Pour obtenir :
x=-12 y=1 z=0 etc...

Je ne parviens pas à le faire.
Quelqu'un aurait-il une idée ?? Merci par avance.

5 réponses

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

Si c'est vraiment mot par mot, tu peux utiliser un std::stringstream.
#include 
#include <sstream>

int main()
{
  std::string trame = "-12 1 0 1";
  std::stringstream buff;
  int x, y, z, a;

  buff << trame;
  buff >> x >> y >> z >> a;
  std::cout << x << " -> "
    << y << " -> "
    << z << " -> "
    << a << std::endl;

  return 0;
}

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016

Tu pourrais utiliser strstr pour décortiquer la chaine non ??

Ce code pourrait t'aider

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char str[] ="123 -17 -47 ";
char * pch;
char *start_pos = str;
char mot[10];

memset(mot,0,sizeof(mot));
pch = strstr(start_pos," ");

while(pch != NULL)
{
memset(mot,0,sizeof(mot));
memcpy(mot,start_pos,strlen(start_pos)-strlen(pch));
printf("%s \n",mot);
start_pos = pch + 1,
pch = strstr(start_pos," ");
}
system("PAUSE");
return 0;
}
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011

Merci beaucoup... Je vais regarder cela de + près des demain et vous tiens au courant ! En effet stringstream me semble tout a fait ce qu'il me faut. Je test au + vite.
1000Merci !!!
Bapt
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011

En effet celà répond parfaitement à ma question alors MERCI Beaucoup !!!

Je ne parviens pas à composer une trame à l'aide d'un "cin" et l'afficher correctement (pour les test).
Mais ceci n'est absolument pas un problème car la Trame reçut provient de communication par le biais de Sockets et celà fonctionne dans ce cas précis.

Bonne soirée et encore merci de ce gros coup de pouce.

Cordialement.
Messages postés
34
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
6 avril 2011

Bonjour à tous, je sollicite à nouveau votre aide suite à un problème de traitement des caractères...


Je n'entre pas dans le If 3 mais je ne sais pas pourquoi.
J'ai tenté avec des case le pb est le même.

Merci d'avance.


#include //setuid()
#include
#include <sys/io.h> // Bibliothèque d'accès paramètres systèmes.
#include <cstdlib> // Pour utiliser la fonct system
#include "Socket.h"
#include <sstream>

using namespace std;

#define port 3501 //definition du port par defaut


/************* Fontion Principale *****************/

int main()
{
system("clear"); // Accès système au terminal
system("echo Connexion en tant que $USER"); // Permet de montrer la connexion en Root

char* Trame;

my_socket mon_port(port); // on crée le Socket mon_port
std::cout<<"\nOuverture du Port"<> cmd >> x >> y >> z >> broche;
std::cout<<"Variables : "<< cmd <<"*"<< x <<"*"<< y <<"*"<<z<<"*"<<"*"<<broche<<"*"<<std::endl;


if(cmd==0) //Deconnexion du client
{
cout<<"\n Deconnexion du client ! \n";
break;
}


if(cmd==1) //Pour la Commande Manuelle
{
cout<<"Commande Manuelle : "<<x<<" "<<y<<" "<<z<<" "<<broche<<endl;
}

if(cmd==2)
{
cout<<"Dans If 2\n";
}

if(cmd==3)
{
cout<<"Dans If 3...";
}

}
}
}