s'échapper d'un while (cin>>string)...

s'échapper d'un while (cin>>string)... - C++ - Programmation

Marsh Posté le 01-11-2006 à 01:39:56    

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 :
  1. #include <algorithm>
  2. #include <iomanip>
  3. #include <ios>
  4. #include <iostream>
  5. #include <string>
  6. #include <vector>
  7. using std::cin;
  8. using std::cout;
  9. using std::endl;
  10. using std::setprecision;
  11. using std::streamsize;
  12. using std::string;
  13. using std::vector;
  14. using std::sort;
  15. int main ()
  16. {
  17. //ask for strings sequence
  18. cout << "Please enter a sequence of strings" << endl;
  19. //reads the sequence and stores it in a vector
  20. std::vector<string> sequence;
  21. typedef std::vector<string>::size_type vec_sz;
  22. vec_sz size;
  23. string st;
  24. while (cin>>st)
  25. {
  26.  sequence.push_back(st);
  27. }
  28. //sorts the table
  29. sort(sequence.begin(),sequence.end());
  30. //counts the references and stores them in a vector
  31. std::vector<int> references;
  32. size=sequence.size();
  33. if(size==0)
  34. {
  35.  cout<<endl<<"Please enter a non empty sequence of strings "<<endl;
  36.  return 1;
  37. }
  38. int s=0;
  39. int count=0;
  40. string pattern;
  41. while (s!=size)
  42. {
  43.  pattern=sequence[s];
  44.  count=0;
  45.  while (sequence[count]==pattern && count<size)
  46.  {
  47.   ++count;
  48.  }
  49.  references.push_back(count);
  50.  s+=count;
  51. }
  52. //prints the results
  53. s=0;
  54. count=0;
  55. int appearances;
  56. cout << "the results are : "<<endl;
  57. while(s!=size)
  58. {
  59.  appearances=references[count];
  60.  cout << "the string : " << sequence[s] <<"appears "<<appearances<<" times "<<endl;
  61.  ++count;
  62. }
  63. return 0;
  64. }


 
mon soucis est que je ne sors jamais de la lecture sur cin :

Code :
  1. while (cin>>st)
  2. {
  3.  sequence.push_back(st);
  4. }


alors que si je lisais des entiers, un CTRL+Z me casserait la boucle.
quelqu'un sait comment contourner ce probleme?
 
merci :jap:

Reply

Marsh Posté le 01-11-2006 à 01:39:56   

Reply

Marsh Posté le 01-11-2006 à 06:57:10    

ctrl-c

Reply

Marsh Posté le 01-11-2006 à 09:23:51    

ca quitte le programme carrément :/
 
le but du programme etant de lire un nombre indéterminé de mots, puis une fois un echappement fait, de compter compbien de fois chaque mot apparait..


Message édité par rui le 01-11-2006 à 09:39:02
Reply

Marsh Posté le 01-11-2006 à 14:06:50    

Tu peux tester contre un mot-clé ou une absence de mot?


---------------
.
Reply

Marsh Posté le 01-11-2006 à 15:43:43    

j'ai essayé, ca merdouille apres .. je cherche d'ou ca peut venir..
hop c'est corrigé!
merci.
 
si quelqu'un voit une autre façon plus simple de faire ce bete programme, je suis preneur de la solution :jap:


Message édité par rui le 01-11-2006 à 16:38:25
Reply

Marsh Posté le 16-11-2006 à 16:01:13    

bah unix : ctrl-D
windows: ctrl-Z si je me souviens.
 
sinon tu rediriges l'entrée standard.

Reply

Marsh Posté le 03-12-2006 à 19:28:34    

nope, le CTRL+Z marche pas sous windows bizarrement dans ce cas :/
qu'entends-tu par rediriger vers l'ES ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed