C++, Compter des caractères ...

C++, Compter des caractères ... - C++ - Programmation

Marsh Posté le 12-10-2011 à 19:57:40    

Olla !  
Voilà, je suis en train de monter logiciel pour mon cousin, seulement, il y a un truc à faire sur lequel je bloque:  
Je voudrais qu'il écrive une phrase, et pouvoir trouver le plus grand nombre de lettres qui se suivent, genre : aaabbkzeubhjj, ça sera 3.  
Je sais comment lire un mot dans la longueur, mais je ne vois pas comment faire pour compter.
 
Voilà où j'en suis :
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main ()
  4. {
  5.     char cara1='0',cara2='1';
  6.     int suitemax=0, suitecurrent=0;
  7.     bool suite=false;
  8.     while(let1!='.')
  9.     {
  10.         cin>>cara1;
  11.         if(cara1==cara2&&suite==true)
  12.         {
  13.             suitecurrent=suitecurrent+1;
  14.            
  15.         }
  16.         cara2=cara1;
  17.     }
  18.     cout<<suitemax;
  19.     return 0;


 
Je ne sais absolument pas comment faire la suite.  :(

Message cité 1 fois
Message édité par JenovaaH le 12-10-2011 à 19:58:32
Reply

Marsh Posté le 12-10-2011 à 19:57:40   

Reply

Marsh Posté le 12-10-2011 à 20:35:37    

traiter l'entrée caractère par caractère n'est que rarement une bonne pratique.
 
Tu devrais plutôt prendre une ligne complète et ensuite la traiter.
Pour résoudre ton problème, essaye de le formaliser en français, décris le processus que tu fais toi-même quand tu comptes les caractères d'une chaine, ca te donnera une idée d'une solution.


---------------
last.fm
Reply

Marsh Posté le 13-10-2011 à 12:20:55    

Il faudrait mettre à jour le drapeau suite.

JenovaaH a écrit :

Voilà, je suis en train de monter logiciel pour mon cousin

Ah c'est bien, ton professeur d'informatique est ton cousin ?
 

Reply

Marsh Posté le 13-10-2011 à 14:03:11    

un truc du genre

 
Code :
  1. const char * p = "aerazerazerzezzezezrjjrjjrjjrjrrrir"; //bref ta chaine
  2. //tu devrais pê gérer le cas où ta chaine ne fait qu'un seul characère
  3. char * s  = p + 1;
  4. int nbMaxChar(1); // => le nombre max de caractères pareils
  5. int nbMaxCharLoc(nbMaxChar); //compteur "local" pour voir si le max "local" est plus grand ou pas que le max "global"
  6. while ( *s )
  7. {
  8.    if ( *s == *(s - 1) )  //si les caractères qui se suivent sont identiques
  9.    {
  10.          nbMaxCharLoc++;
  11.    }
  12.    else   //sinon, tu regardes le max et tu fais un raz du max local et met à jour le max global si besoin
  13.   {
  14.       if ( nbMaxCharLoc > nbMaxChar) nbMaxChar = nbMaxCharLoc;
  15.       nbMaxCharLoc = 1;
  16.   }
  17.  
  18.   s++;
  19. }
  20. if ( nbMaxChar < nbMaxCharLoc )  nbMaxChar = nbMaxCharLoc; //ta chaine est du genre "aaaaaaaaaaaaaaaaaaa" tout pareil, ou alors t'étais en fin de chaine dans une série de caractères identiques
 

enfin c'est pê faux, tu dois pouvoir faire mieux, mais dans l'esprit ça doit être ça ou dans le genre je pense, à mois que tu aies une fonction C/C++ qui te fasses ça directement LOL

 

:??:


Message édité par in_your_phion le 13-10-2011 à 14:17:22
Reply

Marsh Posté le 13-10-2011 à 14:28:56    

theshockwave a écrit :

traiter l'entrée caractère par caractère n'est que rarement une bonne pratique.


 
salut, pourquoi est ce une mauvaise pratique?

Reply

Marsh Posté le 13-10-2011 à 15:03:20    

in_your_phion a écrit :


 
salut, pourquoi est ce une mauvaise pratique?


 
 
Ca peut être adapté, mais ton entrée n'est pas seekable en règle générale. Si tu veux un peu de flexibilité, c'est râpé. Si tu veux par exemple tester une branche d'un arbre dans l'évaluation de ton entrée, tu ne vas pas pouvoir remonter si tu t'es trompé de branche.
Ensuite, il y a des justifications côté performances aussi : non seulement un appel pour récupérer X caractères est généralement mieux que X appels, mais aussi, tu n'as pas de garantie sur la bufferisation de ton entrée (ca pourrait être dans un contexte pourri où la lecture de chaque caractère va te faire un accès disque individuel ou je ne sais quoi)
 
Bref, dans ce cas-ci, ce n'est pas spécialement gênant, c'est seulement que c'est pas une bonne habitude à prendre.


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

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