Partage
  • Partager sur Facebook
  • Partager sur Twitter

isalpha non active dans ctype

    25 mai 2008 à 22:43:21

    Bonjour,

    je souhaite appeler isalpha().

    J'ai inclus <ctype.h>

    j'appelle la fonction:

    ctype::(déroulement de la liste des attribut et méthode)--> problème=isalpha n'apparraît pas dans la liste des méthodes de ctype

    Je vérifie dans ctype.h si isalpha() existe... Seulement voilà:

    #if defined(_CRT_DISABLE_PERFCRIT_LOCKS) && !defined(_DLL)
    <couleur nom="gris">#ifndef __cplusplus
    #define isalpha(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_ALPHA) : __chvalidchk(_c, _ALPHA))
    #define isupper(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_UPPER) : __chvalidchk(_c, _UPPER))
    #define islower(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_LOWER) : __chvalidchk(_c, _LOWER))
    #define isdigit(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_DIGIT) : __chvalidchk(_c, _DIGIT))
    #define isxdigit(_c)    (MB_CUR_MAX > 1 ? _isctype(_c,_HEX)   : __chvalidchk(_c, _HEX))
    #define isspace(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_SPACE) : __chvalidchk(_c, _SPACE))
    #define ispunct(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_PUNCT) : __chvalidchk(_c, _PUNCT))
    #define isalnum(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_ALPHA|_DIGIT) : __chvalidchk(_c, (_ALPHA|_DIGIT)))
    #define isprint(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT) : __chvalidchk(_c, (_BLANK|_PUNCT|_ALPHA|_DIGIT)))
    #define isgraph(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_PUNCT|_ALPHA|_DIGIT) : __chvalidchk(_c, (_PUNCT|_ALPHA|_DIGIT)))
    #define iscntrl(_c)     (MB_CUR_MAX > 1 ? _isctype(_c,_CONTROL) : __chvalidchk(_c, _CONTROL))
    #elif   0         /* Pending ANSI C++ integration */
    _Check_return_ inline int isalpha(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_ALPHA) : __chvalidchk(_C, _ALPHA)); }
    _Check_return_ inline int isupper(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_UPPER) : __chvalidchk(_C, _UPPER)); }
    _Check_return_ inline int islower(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_LOWER) : __chvalidchk(_C, _LOWER)); }
    _Check_return_ inline int isdigit(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_DIGIT) : __chvalidchk(_C, _DIGIT)); }
    _Check_return_ inline int isxdigit(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_HEX)   : __chvalidchk(_C, _HEX)); }
    _Check_return_ inline int isspace(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_SPACE) : __chvalidchk(_C, _SPACE)); }
    _Check_return_ inline int ispunct(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_PUNCT) : __chvalidchk(_C, _PUNCT)); }
    _Check_return_ inline int isalnum(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_ALPHA|_DIGIT)
                    : __chvalidchk(_C) , (_ALPHA|_DIGIT)); }
    _Check_return_ inline int isprint(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_BLANK|_PUNCT|_ALPHA|_DIGIT)
                    : __chvalidchk(_C , (_BLANK|_PUNCT|_ALPHA|_DIGIT))); }
    _Check_return_ inline int isgraph(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_PUNCT|_ALPHA|_DIGIT)
                    : __chvalidchk(_C , (_PUNCT|_ALPHA|_DIGIT))); }
    _Check_return_ inline int iscntrl(_In_ int _C)
            {return (MB_CUR_MAX > 1 ? _isctype(_C,_CONTROL)
                    : __chvalidchk(_C , _CONTROL)); }
    #endif  /* __cplusplus */</couleur>
    #endif  /* _MT */
    


    Il existe mais est grisé. Je ne sais pas si ca a un rapport mais toute cette partie est en gris. Je pense que le define n'a pa pu s'activer suite à une condition non remplite mais laquelle?

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2008 à 23:26:28

      Bienvenue dans le merveilleux monde du C++, là où on ne fait pas nécessairement la même chose qu'en C! À ce que je sache, isalpha() est une fonction du fichier d'en-tête <locale>. Cette version est à privilégier par rapport à celle utilisant les macros.

      • Partager sur Facebook
      • Partager sur Twitter
        26 mai 2008 à 0:02:30

        Heu, ok..
        Après une recherche de locale.h (si c'est bien çà), j'obtiens une fonction de cette entête nommé:

        char * setlocale ( int category, const char * locale );

        Les paramètres sont assez bizarres mais si je comprend bien (je suis sur que non mais je tente^^), en remplaçant category par LC_CTYPE et locale par "C" (parce que isalpha est une fonction du C toujours des suppositions..), j'inclus les prototypes de ctype pour les utiliser en C++?
        J'ajoute bien entendu #include <locale.h>. Ce qui me donne:

        #include <locale.h>
        #include <stdio.h>
        char c;
        int ok;
        setlocale(LC_CTYPE,"C");
        ok=isalpha(c);// Ca marche théoriquement?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          26 mai 2008 à 13:00:49

          Inclus <cctype> (et pas <cctype.h>!) pour utiliser std::isalpha. http://www.cplusplus.com/reference/clibrary/cctype/

          C'est sensé faire quoi ctype::? je connais pas cet espace de nommage...
          • Partager sur Facebook
          • Partager sur Twitter
            26 mai 2008 à 16:03:09

            le isalpha() culture-safe est dans <locale>. Dans <cctype> ce n'est que la version C "transformée" pour le C++.

            setlocale c'est du C...

            #include <locale>
            #include <iostream> // bye bye stdio.h
            
            int main()
            {
                char c = '\0';
                // le constructeur par défaut de locale charge la culture courrante de l'environnement.
                std::locale loc;
            
                // Je n'ai pas ajouté de validation de saisie alors si tu entres plus d'un caractère ca risque de planter.
                std::cout << "Veuillez saisir UN caractere : ";
                std::cin >> c;
            
                // std::isaplha retourne un bool en C++, elle prend en paramètre un objet de std::locale.
                if( std::isalpha( c, loc ) )
                {
                    std::cout << "le caractere '" << c << "' est alphabetique." << std::endl;
                }
                else
                {
                    std::cout << c << " n'est pas alphabetique." << std::endl;
                }
            
                return 0;
            }
            


            Il y a des techniques qui changent en C++. Ne sois pas dérangé, si elles changes c'est qu'il y a des améliorations possibles grâces au différences du C++. Tu dois comprendres que le C++ n'est plus du C et que même si les techniques C sont relativement fonctionelles en C++ c'est seulement par soucis de compatibilité avec des vieux programmes de plusieurs millions de lignes de codes.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              26 mai 2008 à 18:51:16

              Citation : MatteX

              le isalpha() culture-safe est dans <locale>. Dans <cctype> ce n'est que la version C "transformée" pour le C++.

              Hum... local... A mémoriser. :) [ Je ne connaissait pas, merci. ]
              • Partager sur Facebook
              • Partager sur Twitter

              isalpha non active dans ctype

              × 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