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
Version imprimable
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/Citation:
Envoyé par molesqualeux
ok ce n'est pas possible donc je vais faire 40 if else :oops:
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.
Allez au boulot :wink:Citation:
Envoyé 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 :D
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 ...Citation:
Envoyé par PRomu@ld
Marco85
Taratata. On n'a pas invente les boucles pour rien:Citation:
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:
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.Citation:
Envoyé par Dans le mauvais topic, Médinoc
Après, il est très facile de transformer cela en fonction:
Code:
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; }
C'est une solution parmis d'autres...Citation:
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...