Partage
  • Partager sur Facebook
  • Partager sur Twitter

[string] Transformer un nombre en lettre

Sujet résolu
    13 mai 2008 à 21:55:05

    Bon, le titre est un peu raté, mais à vrai dire je ne sais pas trop comment l'annoncer. En fait, je planche sur la création d'un programme console qui "permettrait" (pas sûr de l'orthographe là) que l'utilisateur tape un chiffre, puis que le programme réécrit le chiffre en lettres ... Enfin, si vous comprenez pas, dites-le moi c'est tout à fait légitime :D

    Enfin, voici le code :
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string afficherLettres(string&);
    
    int main()
    {
        string nombreChoisi;
        bool continuer = true;
        int choix = 2;
    
        while(continuer)
        {
            cout << "Choisissez un nombre : ";
            cin >> nombreChoisi;
            cout << nombreChoisi[0];
            cout << afficherLettres(nombreChoisi) << endl;
            cout << "Si vous voulez arreter, tapez 1. Sinon, tapez 2 ! Votre choix : ";
            cin >> choix;
            if(choix == 1)
            {
                continuer = false;
            }
        }
    }
    
    string afficherLettres(string &nombre)
    {
        char caractere;
        string resultat;
        int longueurChiffre;
        
        // Là, au for, je suis pas sûr
        for(int i = 0; caractere != '\0'; i++)
        {
            caractere = nombre[i];
            longueurChiffre = (i+1);
        }
    
        // Conversion des caractères ASCII en nombres
        for(int i = 0; i < longueurChiffre; i++)
        {
            switch(nombre[i])
            {
                case '0':
                    nombre[i]=0;
                    break;
                case '1':
                    nombre[i]=1;
                    break;
                case '2':
                    nombre[i]=2;
                    break;
                case '3':
                    nombre[i]=3;
                    break;
                case '4':
                    nombre[i]=4;
                    break;
                case '5':
                    nombre[i]=5;
                    break;
                case '6':
                    nombre[i]=6;
                    break;
                case '7':
                    nombre[i]=7;
                    break;
                case '8':
                    nombre[i]=8;
                    break;
                case '9':
                    nombre[i]=9;
                    break;
            }
        }
    
        // Gestion du résultat
        switch(longueurChiffre)
        {
            case 1:
                switch(nombre[0])
                {
                    case 1:
                        resultat="un";
                        break;
                    case 2:
                        resultat="deux";
                        break;
                    case 3:
                        resultat="trois";
                        break;
                    case 4:
                        resultat="quatre";
                        break;
                    case 5:
                        resultat="cinq";
                        break;
                    case 6:
                        resultat="six";
                        break;
                    case 7:
                        resultat="sept";
                        break;
                    case 8:
                        resultat="huit";
                        break;
                    case 9:
                        resultat="neuf";
                        break;
                }
                break;
        }
    
        return resultat;
    }
    


    Voilà, je suis désolé de vous avoir balancé ce gros pâté offert un voyage direct vers l'asile demandé de m'aider, mais je ne comprend pas pourquoi çà ne marche pas (mais çà compile) ...

    Merci d'avance,
    L@o58
    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2008 à 22:21:58

      Heu... je comprends vraiment pas ta logique...
      Aussi, voici mon code pour produire le résultat.

      Je l'ai commenté un minimum pour que tu puisse comprendre.

      #include <iostream>
      #include <string>
      
      // la fonction prend un charactère et afficher le chiffre correspondant en lettre
      void afficherChiffre(char c);
      
      int main(int argc, char* argv[])
      {
      	std::string saisie;
      	std::cout << "Entrez un nombre" << std::endl;
      	std::cin >> saisie;
      
      	// pour chaque caractère du mot saisie
      	for(int i=0; i<saisie.size(); ++i)
      	{
      		afficherChiffre(saisie[i]);
      	}
      
      	return 0;
      }
      
      void afficherChiffre(char c)
      {
      	// on compare le caractère aux valeur ASCII, et on affiche le chiffre en lettre
      	switch(c)
      	{
      		case '0':
      			std::cout << "zéro" << std::endl;
      			break;
      
      		case '1':
      			std::cout << "un" << std::endl;
      			break;
      
      		case '2':
      			std::cout << "deux" << std::endl;
      			break;
      
      		case '3':
      			std::cout << "trois" << std::endl;
      			break;
      
      		case '4':
      			std::cout << "quatre" << std::endl;
      			break;
      
      		case '5':
      			std::cout << "cinq" << std::endl;
      			break;
      
      		case '6':
      			std::cout << "six" << std::endl;
      			break;
      
      		case '7':
      			std::cout << "sept" << std::endl;
      			break;
      
      		case '8':
      			std::cout << "huit" << std::endl;
      			break;
      
      		case '9':
      			std::cout << "neuf" << std::endl;
      			break;
      
      		// Si le caractère n'est pas un chiffre
      		default:
      			std::cout << c << " n'est pas un chiffre " << std::endl;
      			break;
      	}
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2008 à 22:26:47

        OUBLIEZ que '0' et 48 sont la même chose!

        Sinon, simplement ch[i]-'0' te donne la valeur du chiffre représenté par le i-ième caractère de la chaine ch.

        Autrement, definis "ne marche pas".
        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          13 mai 2008 à 22:28:40

          Je fatigue... je commence à créer des tables ASCII là où c'est pas la peine...
          j'ai édité le code.
          • Partager sur Facebook
          • Partager sur Twitter
            14 mai 2008 à 3:02:58

            Enfin, si j'ai bien compris...

            #include <iostream>
            #include <string>
            #include <vector>
            
            int main()
            {
                std::vector<std::string> v;
                v.push_back("zero");
                v.push_back("un");
                v.push_back("deux");
                v.push_back("trois");
                v.push_back("quatre");
                v.push_back("cinq");
                v.push_back("six");
                v.push_back("sept");
                v.push_back("huit");
                v.push_back("neuf");
            
                int i;
                cin >> i;
                if(i >= 0 && i <= 9)
                {
                    std::cout << v[i];
                }
                else
                {
                    std::cout << "Le nombre est invalide";
                }
            }
            


            Je te laisse faire le reste...
            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2008 à 11:46:28

              Merci pour le premier code proposé, mais le deuxième ... J'y comprend rien, c'est pas mon niveau :-°
              Enfin, vraiment merci pour le premier, un oubli idiot de la méthode string::size() ... Merci beaucoup donc.
              • Partager sur Facebook
              • Partager sur Twitter

              [string] Transformer un nombre en lettre

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown