Résolu [C++] Incrémentation chaîne de caractères

Solutions (5)
Tags :
  • chaine
  • Programmation
|
Bonjour,

j'essai de faire dans le but d'un défi, un générateur de mots qui puisse donner toutes les solutions possibles selon son nombre de caractères et le nombre de possibilité par caractères.

Exemple, pour un mot de 2 caractères entre a et c ça nous donneras : aa, ab, ac, ba, bb, bc, ca, cb, cc

Dans l’immédiat je n'ai réussi à faire qu'avec 2 caractères, à partir de 3 il ne n'incrémente plus un des caractères.

Auriez-vous une idée de conception, ou bien une piste parceque je sèche la ^^
Voila mon code pour le moment, j'ai essayé pas mal de truc avant mais pour le moment sans succès.

  1. int main()
  2. {
  3. int nbCar = 0;
  4. int i, k;
  5. cout << "Nombre de caractere du mot?" << endl;
  6. cin >> nbCar;
  7. vector<char> mot(nbCar, 'a');
  8. cout << "NB : " << nbCar << endl;
  9. i = 1;
  10. k=0;
  11. while(k<pow(3,nbCar))
  12. {
  13. for(mot[0]='a';mot[0]<='c';mot[0]++)
  14. {
  15. affich(mot);
  16. k++;
  17. }
  18. mot[i]++;
  19. if(mot[i] == 'c')
  20. {
  21. i++;
  22. }
  23. }
  24. return 0;
  25. }


La fonction affich(vector<char>& mot) ne fait qu'afficher le mot dans son intégralité.

Merci d'avance !
Contenus similaires
Meilleure solution
partage
|
J'aurais plutôt fait l'algo en partant dans l'idée de la généralisation d'un mot de m caractères sur un alphabet de n caractères. ça correspond à faire un simple compteur de m chiffres en base n.
Donc, c'est la mémorisation de toutes les valeurs d'un incrémenteur de base n. C'est-à-dire qu'il faut incrémenter le dernier caractère, et lorsqu'il dépasse n, faire la retenue qui incrémente le caractère précédent, etc s'il dépasse (je n'aime pas ça, mais une récursivité est possible).
Lorsque la retenue passe les m caractères, c'est que tout est trouvé, et c'est mieux que de faire un calcul flottant à chaque boucle, même si ce n'est pas de l'électronique. ;) 
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par DivX_666.
  • Commenter cette réponse |
Score
0
òh
òi
|
Je comptais effectivement faire comme ca avec l'idée de CRicky :) 

Merci a vous 2
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
salut, effectivement tu doit faire un conteur en base 26
et un tableau de contenant les lettre de l'alphabet

ensuite tu a juste a conter et a faire correspondre le nombre obtenue ave la lettre du tableau ...
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci pour cette idée, je n'y avais pas penser du tout. Je vais me documenter un peu sur les compteurs en base x parce que je ne sais pas comment faire ce genre de compteur. Malgré mes études en informatique, jamais vu ça en cours (enfin si on devais faire des choses utiles en cours ça se saurait ^^ )
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS