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
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
Salut molesqualeux !
La fonction Recherche avancée sur le forum existe et mieux encore elle fonctionne : regarde ce thread.
Marco85
bonjour,
ton livre ou cours de C ne te le dit pas ? pense à le changer. http://c.developpez.com/cours/Envoyé par molesqualeux
ok ce n'est pas possible donc je vais faire 40 if else![]()
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.
Allez au boulotEnvoyé par molesqualeux
![]()
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![]()
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 ...Envoyé par PRomu@ld
Marco85
Taratata. On n'a pas invente les boucles pour rien:Envoyé par molesqualeux
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.
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++; }
DaZumba vient de montrer avec succès la version Brute Force.Envoyé par Dans le mauvais topic, Médinoc
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.
C'est une solution parmis d'autres...Envoyé par molesqualeux
- 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...
Partager