[String] Comportement bizarre
J'ai écrit un début de programme Dictionnaire, pr le moment c'est un truc tout bête. 0 : j'ajoute un mot, 1 : j'affiche le contenu du dico 2 : je recherche un mot 3 : je sauvegarde le dico 4 : je quitte le dico.
le code est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
string s;
vector<string> dico;
int i;
int choix;
int sortie=4;
string menu="- Taper 0 pour ajouter un mot au dictionnaire.\n- Taper 1 pour consulter le dictionnaire.\n- Taper 2 pour faire une recherche.\n- Taper 3 pour sauvegarder le dictionnaire.\n- Taper 4 pour sortir.";
cout << menu << endl;
cin >> choix;
cout << "choix : " << choix << endl;
i=0;
while(choix!=sortie)
{
switch (choix)
{
case 0: //saisie
{
cout << "Saisie du mot n°"<< i << " :" << endl;
cin >> s;
cout << "Le mot n°" << i << " saisi est " << s << endl << endl;
dico.push_back(s);
cout << "Le mot " << dico[i] << " a été saisi dans le dictionnaire" << endl << endl;
i++;
break;
}
case 1: //consultation
{
if(!dico.empty())
{
cout << endl << "Le dico contient les mots suivants :" << endl;
for(int cpt=0;cpt<dico.size();cpt++)
{
cout << dico[cpt] << endl;
}
cout << endl;
}
else cout << "Le dictionnaire est vide" << endl;
break;
}
case 2 :
{
string motrech="";
cout << "Taper le mot à rechercher dans le dictionnaire" << endl;
cin >> motrech;
bool trouve=false;
vector<string>:: iterator it;
it=dico.begin();
while(!trouve && it!=dico.end())
//for(it; it!=dico.end(); it++)
{
if((*it)==motrech)
{
cout << "Le mot " << motrech << "a été trouvé dans le dico."<< endl;
trouve=true;
}
else it++;
}
if(!trouve)
{
cout << "Le mot " << motrech << "n'existe pas dans le dico." << endl;
}
break;
}
case 3 : //pas fait encore
default: cout << "Saisie invalide. Veuillez recommencer."; break;
}
cout << menu << endl;
cin >> choix;
cout << endl;
}
system("pause");
return 0;
} |
Jusque là, ça marche presque parfaitement. Presque, parce que si j'ajoute des "mots unitaires", ça passe sans problème (ex : le mot dico est ajouté, affiché et trouvé sans pb). Par contre, si je rentre une expression (ex : "mon dico"), avec un espace donc, là, mon while devient infini, et j'ai un affichage infini de mon "menu".
Que se passe-t-il? Je manipule des string, donc ça ne devrait rien changer que je mette un espace ou non dans une string...
merci à qui pourra m'aider.