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 :

switcher une chaine?


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Par défaut switcher une chaine?
    bonjour ,

    est ce possible de faire un switch sur une chaine de caractère en C.?
    Si non , la solution est de faire une série de if else?
    merci

  2. #2
    Membre confirmé Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Par défaut
    Salut molesqualeux !

    La fonction Recherche avancée sur le forum existe et mieux encore elle fonctionne : regarde ce thread.

    Marco85

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: switcher une chaine?
    bonjour,

    Citation Envoyé par molesqualeux
    est ce possible de faire un switch sur une chaine de caractère en C.?
    Si non , la solution est de faire une série de if else?
    merci
    ton livre ou cours de C ne te le dit pas ? pense à le changer. http://c.developpez.com/cours/

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Par défaut
    ok ce n'est pas possible donc je vais faire 40 if else

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Un conseil:
    À cette échelle, utilise un tableau de chaînes et des pointeurs de fonction...

    L'avantage, c'est que là, tu peux faire tes recherches différemment : Si tes chaînes sont triées, tu peux faire une recherche dichotomique, ou sinon, tu peux carrément t'amuser à faire une table de hachage, etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par molesqualeux
    ok ce n'est pas possible donc je vais faire 40 if else
    Allez au boulot

    Tu peux créer une fonction ( dans un fichier séparé par exemple ) qui effectuera tes 40 switch. Parce que en plein dans le main on va plus du tout rien pouvoir lire

  7. #7
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Avec le préprocesseur, on peut toujours jongler en gros si t'a une macro qui te renvoie des entiers différents en fonctions de la comparaison de la chaine ça peut être utilisable sur un switch, mais ce n'est pas une bonne idée, car assez compliqué à mettre en oeuvre.

  8. #8
    Membre confirmé Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Par défaut
    Citation Envoyé par PRomu@ld
    Avec le préprocesseur, on peut toujours jongler en gros si t'a une macro qui te renvoie des entiers différents en fonctions de la comparaison de la chaine ça peut être utilisable sur un switch, mais ce n'est pas une bonne idée, car assez compliqué à mettre en oeuvre.
    Ou alors une énumération ... Mais comme tu dis, assez compliqué à mettre en oeuvre ...

    Marco85

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par molesqualeux
    ok ce n'est pas possible donc je vais faire 40 if else
    Taratata. On n'a pas invente les boucles pour rien:
    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
     
        char my_string[] = "titi";
        char *possible_strings[] =
              { "toto", "titi", "tata", NULL };
        int i = 0;
        int chosen_string = -1;
     
        while(possible_strings[i])
        {
            if(strcmp(my_string, possible_strings[i]) == 0)
            {
                 chosen_string = i;
                 break;
            }
            i++;
        }
    Evidemment, mon exemple est simple. Tu peux avoir des structures plus compliquees qui envoient des pointeurs de fonction different selon la chaine qui correspond, etc. Egalement, de facon simple, tu peux ensuite faire un switch sur chosen_string.

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par Dans le mauvais topic, Médinoc
    Ou bien, une fonction qui prend en entrée un tableau de chaînes constantes, la chaîne à reconnaitre et qui retourne l'index dans ce tableau...

    L'index retourné peut être utilisé dans le switch, et la fonction peut rechercher la chaîne comme elle veut (brute force ( = "Comparer avec toutes les chaînes l'une après l'autre"), dichotomie, hachage, etc.)
    DaZumba vient de montrer avec succès la version Brute Force.
    Après, il est très facile de transformer cela en 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
     
    int TrouveChaine(
     char const * const * const pt_sczChainesPossibles,
     char const * const sczChaine
     )
    {
    int i = 0;
    int iRetour = -1;
     
    for( i=0 ; pt_sczChainesPossibles[i] ; i++ )
    	{
    	if(strcmp(sczChaine, pt_sczChainesPossibles[i]) == 0)
    		{
    		iRetour = i;
    		break;
    		}
    	i++;
    	}
    return iRetour;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: switcher une chaine?
    Citation Envoyé par molesqualeux
    est ce possible de faire un switch sur une chaine de caractère en C.?
    Non.
    Si non , la solution est de faire une série de if else?
    merci
    C'est une solution parmis d'autres...
    • Au-dessus d'une 10aine : recherche linéaire dans un tableau de chaines
    • Au-dessus d'une 50aine : recherche dichothomique dans un tableau de chaines triées
    • Au-dessus de 1000 : tables de hashages...

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

Discussions similaires

  1. langage] Découper une chaine suivant un délimiteur
    Par totox17 dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2002, 16h25
  2. Réponses: 23
    Dernier message: 16/11/2002, 19h41
  3. Réponses: 2
    Dernier message: 10/07/2002, 11h51
  4. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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