problème pas clair (en tout cas pour moi :p )

problème pas clair (en tout cas pour moi :p ) - C++ - Programmation

Marsh Posté le 27-03-2003 à 18:08:41    

voila, ce programme est sensé me renvoyer le nombre de voyelle, je l'ai testé avec une chaine contenant 49 voyellles, mais il m'en renvoie 42.. je vois pas ou est le problème, si vous pouviez m'aider ça serait tres sympa.
 
#include <iostream>
#include <string>
 
#define NB_LETTRE 11
 
using namespace std;
 
int main()
{
  int k=0;
string chaine;
  char alphab[NB_LETTRE]={'a','A','e','E','i','I','o','O','u','U'};  
   
cin >> chaine;
 
size_t chaine_len = chaine.length();  
 
for(unsigned i=0;i<chaine_len;i++)
    {
     for(unsigned j=0;j!=NB_LETTRE-1;j++)
 {
   if(chaine[i]==alphab[j]) {k++;}
 }  
}
 cout << k <<'\n';
return 0;
}

Reply

Marsh Posté le 27-03-2003 à 18:08:41   

Reply

Marsh Posté le 27-03-2003 à 18:15:02    

ben moi ca marche  [:spamafote]  
T'as entre quelle chaine ?
 
Ha au fait

Code :
  1. char alphab[]={'a','A','e','E','i','I','o','O','u','U'};


suffit. Vu tu l'initialises, t'as pas besoin de mettre la taille
 
Ha oui et pense aux balises [cpp][/cpp] pour mettre du code


Message édité par bobuse le 27-03-2003 à 18:15:34

---------------
get amaroK plugin
Reply

Marsh Posté le 27-03-2003 à 18:16:51    

C'est normal, il y a rien après 42
 
[:dehors]


Message édité par kadreg le 27-03-2003 à 18:17:01

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-03-2003 à 18:19:18    

kadreg a écrit :

C'est normal, il y a rien après 42
 
 

:??:


---------------
get amaroK plugin
Reply

Marsh Posté le 27-03-2003 à 18:21:16    

ben en fait, c pour le concours prologin, moi j'ai testé sur quelques chaines et ça marchait, mais sur leur site il disent que le code est faux  :??:  :??:

Reply

Marsh Posté le 27-03-2003 à 18:24:09    

On vous donne une longue chaîne de caractères majuscules et minuscules, sans accents. Ecrire une fonction qui renvoie le nombre de voyelles qu'elle contient.
LIMITES DE TEMPS ET DE MEMOIRE
 
    * Temps : 1 s.
    * Mémoire : 1000 Ko.
 
CONTRAINTES
 
1 <= L <= 10000, où L est le nombre de lettres de la chaîne.
ENTREE
 
L'entrée contient deux lignes :
 
    * Le nombre de caractères de la chaîne.
    * La chaîne de caractères.
 
 
SORTIE
 
Vous devez écrire une ligne sur la sortie : le nombre de voyelles de la chaîne.
EXEMPLE(S) D'ENTREE / SORTIE
 
Exemple 1 :
en entrée ...
8
ProlOgiN
en sortie ...
3
COMMENTAIRES
 
Source C à compléter :
 
int CompteVoyelles(char* str)
{
}
 
int main()
{
   char str[10001];
   int size;
   int res;
   scanf("%d\n%s", &size, str);
   res = CompteVoyelles(str);
   printf("%d\n", res);
   return 0;
}
 
-----------------------------------------------------------
moi j'ai preféré le faire en C++, ca pose problème parce qu'il demande la taille de la chaine en entree .. alors que pour moi, cela me sert a rien, j'ai triché en faisait un :
 
[cpp]
 
int nb;
 
cin >> nb;
[/cpp)
 
et c tout

Reply

Marsh Posté le 27-03-2003 à 18:28:53    

C'est peut être plus trop approprié à ta situation, mais voici une solution que je viens de faire (qui utilise basic_string::find_first_of) :

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. const string voyelles( "aAeEiIoOuUyY" );
  7. string input;
  8. cin >> input;
  9. string::size_type pos = 0;
  10. string::size_type count = 0;
  11. while( true )
  12. {
  13. pos = input.find_first_of( voyelles, pos );
  14. if( pos == string::npos )
  15. break;
  16. pos++;
  17. count++;
  18. }
  19. cout << count << " voyelles trouvées !" << endl;
  20. return 0;
  21. }


---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-03-2003 à 18:31:56    

argh mais je débute je le trouve dur à comprendre ton code !!! :sweat:

Reply

Marsh Posté le 27-03-2003 à 18:36:54    

umer a écrit :

argh mais je débute je le trouve dur à comprendre ton code !!! :sweat:  


et ben ca te fait un bon exo !


---------------
get amaroK plugin
Reply

Marsh Posté le 27-03-2003 à 18:39:46    

j'ai rien compris à ces lignes
 

Code :
  1. int main(int argc, char* argv[])
  2. string::size_type pos = 0;
  3. string::size_type count = 0;
  4. pos = input.find_first_of( voyelles, pos );
  5. if( pos == string::npos )


 
je sais absolument pas à quoi ce refere ces fonctions, et les paramètres qu'on passe a la fonction main, quelqu'un peut-il eclairer ma lanterne ? merci de votre aide

Reply

Marsh Posté le 27-03-2003 à 18:39:46   

Reply

Marsh Posté le 27-03-2003 à 18:50:54    

Code :
  1. int main(int argc, char* argv[])


ben argv, c'est la liste des arguments, et argc le nombre d'arguments. Note qu'ils ne sont pas utilisés

Code :
  1. string::size_type pos = 0;
  2. string::size_type count = 0;


Ben la, il declare deux variables, qu'il initialise a 0

Code :
  1. pos = input.find_first_of( voyelles, pos );
  2. if( pos == string::npos )


la, il utilise une methode de la classe string qui lui renvoie l'index de la premiere voyelle dans la chaine a partir de la position pos. Et puis il verifie qu'une voyelle a bien ete trouvee, sinon c'est la fin
 
 [:spamafote]


---------------
get amaroK plugin
Reply

Sujets relatifs:

Leave a Replay

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