Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment connaitre un type de variable?

Sujet résolu
    7 décembre 2007 à 16:04:21

    Bonjour,

    j'ai un probleme, et je n'ai pas trouvé la solution (peut etre ai-je mal regardé dans les tuto ou les forums)
    en fait je me fais un petit programme, dans lequel je souhaite entrer une ligne de caracteres
    mais je veux, si cette ligne contient des nombres, pouvoir les extraire.
    ex:"bonjour j'ai 45 ans"==>45 n'est pas formé de caracteres donc je l'extrait
    J'ai regarder sur le net, et ai vu des "ischar" "isint" mais ca ne marche pas...
    voila, si quelqu'un peut me dire comment distinguer les nombres et les caracteres, ce serait rudement sympa
    merci
    • Partager sur Facebook
    • Partager sur Twitter
      7 décembre 2007 à 16:17:20

      en C ou C++ on utilise isdigit() de la bibliothèque C <ctype.h> ou C++ <cctype>

      Il ne te reste qu'à boucler dans ta chaîne et extraitre les suites où isdigit te retourne quelque chose différent de zéro!
      • Partager sur Facebook
      • Partager sur Twitter
        7 décembre 2007 à 16:17:45

        Je peux t'aider. J'ai imaginé une technique basé sur l'ASCII. C'est pas bien compliqué.

        Tu sais que dans la table ASCII, tous les chiffres se suivent. Donc tu parcoures ta chaîne de caractère, et si un char est compris dans [48;57] (0 en ASCII fait 48, 9 fait 48 + 9, 57 :p ). A ce moment là, tu peux supprimer les chiffres et même les stocker (en se basant sur le même principe et les puissances de 10), en les recomposant.

        Au cas où, histoire d'incertitude de portabilité, je te conseille de ne pase utiliser 48 et 57, mais plutôt (int)'0' et (int)'9'.


        Voila ;)
        • Partager sur Facebook
        • Partager sur Twitter
          7 décembre 2007 à 16:28:48

          merci pour votre rapidité à tous les deux!
          c'est vraiment epatant!
          je vais d'abord essayer isdigit, qui me parait plus simple
          ...enfin je vais voir
          • Partager sur Facebook
          • Partager sur Twitter
            7 décembre 2007 à 16:35:14

            Je me corriges, en C on utilise bien la fonction que j'ai précédemment nommée mais en C++ on utilise isdigit de <locale>!

            Pourquoi? Parce que tout simplement un chiffre latin != un chiffre chinois!

            En s'habituant avec les locales on se prépare a faire des logiciels absolument béton!

            1. #include <locale>
            2. void afficherEstChiffre( char c )
            3. {
            4.     const std::locale & loc = std::locale::classic(); // US_ASCII
            5.     if( std::isdigit( c, loc ) )
            6.         std::cout << c << " est un chiffre" << std::endl;
            7.     else
            8.         std::cout << c << " n'est pas un chiffre" << std::endl;
            9. }
            10. int main()
            11. {
            12.     afficherEstChiffre( '9' );
            13.     afficherEstChiffre( 'k' );
            14.     afficherEstChiffre( '/' );
            15.     afficherEstChiffre( 'è' );
            16.     afficherEstChiffre( '0' );
            17.     afficherEstChiffre( '\n' );
            18.     return 0;
            19. }


            <EDIT>Indentation et syntaxe</EDIT>
            • Partager sur Facebook
            • Partager sur Twitter
              7 décembre 2007 à 16:51:50

              Tente d'extraire dans un nombre, si ce n'en est pas un, le flux sera invalidé. (pense à le restorer, tout ça ... -> FAQ C++ developpez)
              • 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.

              comment connaitre un type de variable?

              × 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