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

C++ Discussion :

C++ redefinir isalpha


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut C++ redefinir isalpha
    Bonjour,

    J'ai tenté de redefinir la fonction isalpha(fonction predefini ).

    J'aimerai que seulement les caracteres alphabetiques et les caracteres accentués puissent valoir true !

    Par contre il laisse passer des caracteres que je ne souhaite pas ! exemple ici (",8, : ,)

    voila la chaine et le main :
    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
    23
    24
    25
    26
    27
    28
    29
     
    #include <iostream>
     
    using namespace std;
     
    bool my_isalpha(char c);
    int main(int argc, char *argv[]){
     
       unsigned beg = 0;
       unsigned end = 1;
         string machaine = "picouly \"68 mon amour\"dormesson bernard henry levy : Le Diable en tête";
          for(unsigned no_mot=0;end <machaine.size();++no_mot){
     
         for(;end < machaine.size()&& my_isalpha(machaine[end]);++end);
     
                    //beg=debut du mot end-beg= taille du mot 
                    string mot(machaine,beg,end-beg);//recuperation du mot                            
     
                   if(mot.size()<3 ){//si c'est un mot court
     
                    cout<<" "<<mot<<endl;
                    }//fi             
                    beg = end + 1;
                    end = beg + 1;
                  }  //fin
     
       system("PAUSE");   
       return 0;
    }//main

    Et la fonction
    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
    23
    24
    25
    26
    27
    28
    29
     
    bool my_isalpha(char c)
      {
      // Si c est un caractere alphabetique
      if(isalpha(c)) 
        return true ;
      else	// Sinon...
        {
       switch(c)  // Pour les ...
          {
          case 'à' : // ..'a' accentués
          case 'â' :
          case 'é' : // ..'e' accentués
          case 'è' : 
          case 'ê' :
          case 'ë' :
          case 'î' : // ..'i' accentués
          case 'ï' :
          case 'ô' : // ..'o' accentués
          case 'ù' : // ..'u' accentués
          case 'ç' : //...ç
            return true ;	// Sortie TRUE
          break ;
          default  : // Pour les autres
            return false ;	// Sortie FALSE
          break ;
          } ;//switch
        }
      }


    Affichage

    "
    8
    :
    Le
    en


    ---

    Je voulais juste (Le et en) Si quelqu'un voit où se trouve le Kouack ! Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut réponse
    Ne serait-il pas plus simple ici de coder toi-même une fonction qui analyse les caractères de la chaine envoyée en arg (via code ascii pour les lettres) et retourne la chaine désirée ?

    Ton switch me semble bizarre...

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Je me demande pourquoi vouloir surcharger la fonction...

    Après tout, mis à part isalpha, il existe quantité d'autres fonctions qui peuvent t'apporter un élément sur le fait d'afficher (ou non) un caractère et sur la manière de le gérer.

    Je te conseillerais de jeter un oeil au tableau qui se trouve ici.

    Pour la plupart, tu peux lancer un isunterme(car a chercher) (ou unterme se trouve dans le tableau indiqué), pour savoir s'il fait partie ou non de la catégorie
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre émérite

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Attention, appeler isalpha ou tout autre fonction du même genre sur un char est un comportement indéfini. Ces fonctions n'acceptent que des valeurs entre 0 et 255 ou EOF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bool b1 = isalpha('é'); // Boom !
    bool b1 = isalpha(static_cast<unsigned char>('é')); // OK

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    En même temps....

    isalpha marche très bien... à condition de ne pas rester en locale C-ANSI (en_us, ASCII), et de bien selectionner la locale du systeme (ou toute autre locale adaptée).

  6. #6
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    Merci a tous !

    Les fonctions isalpha,isspace...marche nickel c'est jusque mes boucles si 2 separateurs se suivent 1 seul sera résolu !

    Je vais voir ca encore Merci

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

Discussions similaires

  1. [Listener] redefinir un listener sur Frame
    Par zozolh2 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 21/11/2005, 09h44
  2. redefinir une fonction dans un header
    Par ghostdogpr dans le forum C
    Réponses: 5
    Dernier message: 31/10/2005, 03h25
  3. [JTree] Redefinir dessin
    Par Micky1407 dans le forum Composants
    Réponses: 16
    Dernier message: 22/07/2005, 16h59
  4. [ImageIcon] redefinir une Image Icon
    Par b_52globemaster dans le forum 2D
    Réponses: 5
    Dernier message: 06/07/2005, 14h35
  5. [Debutant] Redefinir une méthode
    Par joquetino dans le forum Langage
    Réponses: 7
    Dernier message: 29/09/2004, 10h07

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