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 :

tester un char


Sujet :

C++

  1. #1
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut tester un char
    Je cherche à savoir quelle est la solution la plus rapide:
    J'ai un char, et je dois savoir s'il fait partie d'une certaine liste.
    que faire ?

    - les mettre dans un tableau / vecteur et tester avec un for chaque valeur de ce tableau

    - faire une condition monstrueuse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (char == ',' || char == '\\' || ...)
    sachant que j'ai un peu plus d'un dizaine d'éléments, qu'est-ce qui est le mieux ?
    Je penche pour la deuxième solution, mais j'hésite

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Moi j'utiliserais ça (qui n'est rien d'autre qu'une boucle for que tu n'as pas à écrire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const std::string tokens = "();,./!";
    if (tokens.find(c) != std::string::npos)
    {
        // Trouvé
    }
    Et je chercherai une autre solution si une mesure de performances me dit que je dois le faire.

  3. #3
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Mon frère m'a proposé une solution, certes peu orthodoxe, mais néanmoins efficace:
    un tableau statique de bools de 256 entrées définies toutes à false.
    Puis on définit les entrées des jetons (bool[';'] = true etc...) à true
    ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (token[char]) {
        cout << "it's a token" << endl;
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est une solution qui est plus rapide d'ailleurs que celle de Laurent.

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par loufoque
    C'est une solution qui est plus rapide d'ailleurs que celle de Laurent.
    ah bon ? dans la dernière solution proposée on est obligé de définir un tableau de taille 128 ou 256 (ascii étendu) pour avoir tous les caractères. ensuite on doit initliser chaque bool à true/false suivant qu'on considère le char comme un token ou non. ok, une fois que c'est fait il n'y a plus qu'à accéder au 'char'ième élément (acès direct), mais avant ça bonjour.

    l'autre solution, STL + une chaîne ne contenant que les tokens.

    je pense qu'à moins d'avoir un énorme nombre de tests à faire (auquel cas on peut éventuellement sacrifier à l'initialisation à la mano du tableau ), la 2nde solution est préférable. et sans parler de performances plus élégante, plus courte et moins sujette à erreur (imaginons qu'on initialise mal le tableau de bool sur 1 ou 2 valeurs...).

    car si j'ai bien compris la solution envisagée est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool token[256];
     
    for (int i=0; i<','; i++) token[i] = false;
    token[','] = true;
    token[45] = false;
    token['.'] = true;
    ...
    token[';'] = true;
    for (int i=';'; i<255; i++) token[i] = false;
    ...
    if (token[char]) {
        cout << "it's a token" << endl;
    }

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Tu fais un ensemble, c'est essentiellement fait pour ça.
    La stl dispose de set, je te laisse jeter un coup d'oeil.

Discussions similaires

  1. Tester un char
    Par takago dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/06/2013, 10h55
  2. Réponses: 9
    Dernier message: 29/07/2005, 17h03
  3. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  4. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55
  5. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43

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