C++

Résolu
sanaa1 Messages postés 64 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Ecrire un programme qui saisit une chaîne pouvant contenir des espaces et qui affiche chaque mot de la chaîne, le séparateur étant l'espace.
Exemple, on tape : je pense donc je suis
Le programme affiche :
mot 1 : je
mot 2 : pense
mot 3 : donc
mot 4 : je
mot 5 : suis

voila l'ennonce de mon exercice ,j'ai trouve la solution mais j'ai rien compris si qql pourrait m'expliquer d'avantage ce serait tres sympa.
merci bcpppp
#include<iostream>
using namespace std;

int main()
{
char t[50];
char mot[50];

int i=0,j=0,etat=1,num=0;

cout<<"Tapez une phrase : ";cin.getline(t,50);

while(t[i]!='\0'){
if(etat==1)
{
if(t[i]!=' ')
{
etat=2;j=0;mot[0]=t[i];j++;
}
}
else
{
if(t[i]!=' '){mot[j]=t[i];j++;}
else
{
etat=1;
num++;
mot[j]='\0';
cout<<"mot "<<num<<" : "<<mot<<endl;
}
}
i++;
}
if(etat==2)
{
num++;
mot[j]='\0';
cout<<"mot "<<num<<" : "<<mot<<endl;
}
return 0;
}

Configuration: Windows XP
Firefox 2.0.0.11

4 réponses

  1. sanaa1 Messages postés 64 Statut Membre 6
     
    slt
    qql pourrait m'aider ?svp
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Bah en fait c'est plutôt on t'a donné la solution alors ?
    Enfin peu importe. Le principe c'est de parcourir la phrase entrée par l'utilisateur (t). A noter que si la phrase fait plus de 50 caractères le programme plante.

    Il suffit ensuite de parcourir t du début à la fin (\0). La suite est codée de manière assez étrange... en particulier je ne comprends pas trop pourquoi il y a des états (et en plus c'est pas indenté). Visiblement i correspond au caractère courant, etat = 1 à "mot en cours de lecture, etat = 2 à "mot lu", et num compte le nombre de mots lus.

    En fait le programme serait beaucoup plus simple (et lisible) en utilisant la fonction strtok.
    http://www.cplusplus.com/reference/cstring/strtok/

    En gros ca donne :
    #include <cstring>
    #include <iostream>
    
    int main (){
            const char *sep = " ";
            char str[] = "je pense donc je suis";
            char *pch = strtok(str,sep);
            for(unsigned i = 0 ; pch != NULL ; ++i){
                    std::cout << "mot " << i << '\t' << pch << std::endl;
                    pch = strtok (NULL,sep);
            }
            return 0;
    }

    ce qui est à mon humble avis un poil plus lisible...

    Bonne chance
    0
  3. sanaa1 Messages postés 64 Statut Membre 6
     
    salut
    ok.........je pense que j'ai compris un peu ,merci bcp pour ta reponse
    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Ok bonne continuation :-)
    0