IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques C++ Discussion :

Probleme avec "cctype" ou "ctype"


Sujet :

Bibliothèques C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Probleme avec "cctype" ou "ctype"
    Bonjour !
    Dans mon programme, j'ouvre un fichier avec ifstream: ifstream fichier(chars,ios::in); et je fais la lecture du fichier caractère par caractère "fichier.get(caractere)".
    Avec "caractere" déclarer comme un char.
    Grâce à une boucle je parcours les caractères de ce fichier en faisant au passage des tests sur ses caractères.
    Parmi ces tests je vérifie la nature de chacun des caractères. Pour cela j'ai utilisé la librairie "cctype (j'ai plustard réessayé avec ctype.h)".
    J'ai donc utilisé les fonctions de cette librairie (: ispunct;isalpha;isdigit;...).
    A la compilation tout ce passe bien, en plus j'ai essayé le code sur certains fichiers et les résultats étaient correctes.
    Mais en faisant toujours des essaies, je suis tombé sur certains fichiers où le programme se bloc et où le débogueur m'écrit:
    Expression: Debug Assertion
    (unsigned(c+1)<=256.
    Bien-sur il n'y à pas cette syntaxe (
    unsigned(c+1)<=256
    ) dans mon code. Alors j'ai continué à chercher et c'est là que j'ai vu que l'erreur étais causé quand les caractères tels que "é" et "è" et "§" "enfin bref vous voyez le genre" se trouvent parmi les caractères du fichier.

    J'aimerais vraiment comprendre ce qui ce passe avec le "cctype"? comment corriger ce probleme ; sinon il y a t'il une librairie du même genre que je pourrais utiliser.
    Cordialement ....
    Je suis sous "Visual Studio C++ 2008" --- "XP"

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Normal, les fonctions de <cctype> n'acceptent pas les valeurs négatives, il faut caster le char en unsigned char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isalpha((unsigned char)c);
    sinon c'est un comportement indéfini (crash possible).

  3. #3
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Ou plus simplement déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unsigned char caractere
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isalpha((unsigned char)c);
    Là ça prends!
    Mais ça ne reconnais toujours pas le "é" comme caractère (ni alphabétique, ni ponctué)

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    En tout cas on peut accorder que c'est un caractère alphabétique mais certainement quand même pas une ponctuation ...

    Le problème se résout plus facilement en C donc je te poste du code C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <stdio.h>
    #include <ctype.h>
    #include <locale.h>
     
    #define bool_to_str(x) ((x) ? "true" : "false")
     
    int main()
    {
        unsigned char c = 'é';
     
        /* Par defaut les programmes utilisent les locales du C standard */
     
        printf("%s\n", bool_to_str(isalpha(c))); /* affiche false */
     
        setlocale(LC_CTYPE, ""); /* Utilisons les locales du systeme et non du C standard */
     
        printf("%s\n", bool_to_str(isalpha(c))); /* affiche true, si ton systeme est "francais" */
     
        setlocale(LC_CTYPE, "C"); /* Remettons tout dans l'ordre (ici c'est inutile mais ...) */
     
        return 0;
    }

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. findNext probleme avec les quotes
    Par pato74 dans le forum VBA Access
    Réponses: 10
    Dernier message: 29/01/2009, 10h28
  2. [PHP/MySQL] Probleme avec ' (quote)
    Par xtaze dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 02/11/2006, 10h00
  3. [text] probleme avec simple quote
    Par bor1s dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/12/2005, 16h03
  4. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16
  5. Réponses: 2
    Dernier message: 30/08/2004, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo