salut les surdoués du compilo.
je bosse le C++ avec le bouquin de koenig et Moo (accelerated c++)
j'essaie de faire l'exo 3.3 , consécutif a la decouverte des objets "vector" et autres manipulations de flux standard.
le but est de faire un programme qui demande en input des mots, et une fois que tout est rentré, qui va compter pour chaque mot le nombre de fois ou il est apparu.
ma version:
Code :
- #include <algorithm>
- #include <iomanip>
- #include <ios>
- #include <iostream>
- #include <string>
- #include <vector>
- using std::cin;
- using std::cout;
- using std::endl;
- using std::setprecision;
- using std::streamsize;
- using std::string;
- using std::vector;
- using std::sort;
- int main ()
- {
- //ask for strings sequence
- cout << "Please enter a sequence of strings" << endl;
- //reads the sequence and stores it in a vector
- std::vector<string> sequence;
- typedef std::vector<string>::size_type vec_sz;
- vec_sz size;
- string st;
- while (cin>>st)
- {
- sequence.push_back(st);
- }
- //sorts the table
- sort(sequence.begin(),sequence.end());
- //counts the references and stores them in a vector
- std::vector<int> references;
- size=sequence.size();
- if(size==0)
- {
- cout<<endl<<"Please enter a non empty sequence of strings "<<endl;
- return 1;
- }
- int s=0;
- int count=0;
- string pattern;
- while (s!=size)
- {
- pattern=sequence[s];
- count=0;
- while (sequence[count]==pattern && count<size)
- {
- ++count;
- }
- references.push_back(count);
- s+=count;
- }
- //prints the results
- s=0;
- count=0;
- int appearances;
- cout << "the results are : "<<endl;
- while(s!=size)
- {
- appearances=references[count];
- cout << "the string : " << sequence[s] <<"appears "<<appearances<<" times "<<endl;
- ++count;
- }
- return 0;
- }
|
mon soucis est que je ne sors jamais de la lecture sur cin :
Code :
- while (cin>>st)
- {
- sequence.push_back(st);
- }
|
alors que si je lisais des entiers, un CTRL+Z me casserait la boucle.
quelqu'un sait comment contourner ce probleme?
merci