Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1342 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Rempalcer des if/else avec des String en Switch/case avec des entiers?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Rempalcer des if/else avec des String en Switch/case avec des entiers?

n°595954
duglambier
Posté le 23-12-2003 à 09:57:29  profilanswer
 

Bonjour,
 
 j'ai un programme qui utilise des if/else avec strcmp sur des String, et j'aimerai transformer cela en Switch/case avec des entiers.
 
Je ne sais pas comment faire, j'ai peut etre une piste avec les define. Pourriez vous m'aider s'il vous plait ?

mood
Publicité
Posté le 23-12-2003 à 09:57:29  profilanswer
 

n°595971
Taz
bisounours-codeur
Posté le 23-12-2003 à 10:48:52  profilanswer
 

précise ton usage, j'ai une solution sur un cas un peu similaire.

n°595973
duglambier
Posté le 23-12-2003 à 10:52:45  profilanswer
 

Disons que je fais un strtok sur une Ligne String
J'ai une variable appelé token qui est un String
 
Cette variable peut prendre differente valeurs (une dizaine) qui peut etre par exemple "TATA", "TOTO", "TITI", "TUTUTU" ...
 
A chaque valeur est associé un pseudi traitement different.
 
Avant on faisait un
if (strcmp(token,"TATA" )==0)
{
 
}
else.....
 
 
c tres lourd je trouve, alors que la structure du Switch/Case est bien plus elegante.
 
Mais je vois pas de solution simple sans tout casser :(

n°595979
Taz
bisounours-codeur
Posté le 23-12-2003 à 11:07:59  profilanswer
 

pseudo traitement différent ? il l'est vraiment ?
 
http://dejean.benoit.free.fr/tmp/g [...] bnailer3.c
moi j'ai un truc XML, et en fonction de la chaine, je tappe dans un champ. j'ai donc ranger des couples (chaine, offset) et après recherche dichotomique dedans.
 
tu peux faire la même chose (ou avec une table de hachage), tu range des couples (chaine, id_unique), tu cherches et après tu switch. ou alors (chaine, ptr_fonction), et là, pas de switch, direct l'appel

n°595990
duglambier
Posté le 23-12-2003 à 11:42:55  profilanswer
 

Merci pour le code. Je ne suis pas spécialiste en C, je vais donc voir ce que je peux faire. En tout cas l'idee est bonne :)

n°595997
duglambier
Posté le 23-12-2003 à 12:05:39  profilanswer
 

Au passant, je ne sais pas si c louable ou pas, mais le plus performant à la compilation/execution, c'est le SWITCH/CASE ou le IF/ELSE ?

n°596000
Taz
bisounours-codeur
Posté le 23-12-2003 à 12:09:54  profilanswer
 

ça dépend du compilateur et du bordel, de la taille du switch.
sinon tu peux utiliser une fonction de hachage parfaite, bien bijective et te servir d'elle pour l'indice. la soupe de gperf doit être récupérable et modifiable

n°596358
gilou
Modérateur
Modzilla
Posté le 24-12-2003 à 03:58:25  profilanswer
 

taz a écrit :

ça dépend du compilateur et du bordel, de la taille du switch.
sinon tu peux utiliser une fonction de hachage parfaite, bien bijective et te servir d'elle pour l'indice. la soupe de gperf doit être récupérable et modifiable

Exactement, c'est la seule methode vraiment efficace des qu'on a un nb de chaines plus grand que 3 ou 4. gperf c'est pas du C++ qui est genere?? Il y a un cperf (son ancetre?) qui genere du C. Ca demande un poil de pratique dans le parametrage pour eviter les collisions.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°596363
Taz
bisounours-codeur
Posté le 24-12-2003 à 07:28:53  profilanswer
 

non non gperf crache du C et en option du C++. et son job c'est justement de générer quelque chose qui évite tant que possible les collisions

n°596428
gilou
Modérateur
Modzilla
Posté le 24-12-2003 à 12:22:34  profilanswer
 

Oui, je viens d'y jeter un oeil, ca a l'air de s'etre pas mal ameliore, gperf.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Rempalcer des if/else avec des String en Switch/case avec des entiers?

 

Sujets relatifs
problème avec un switch et les chaines de caractère !![PHP] pb switch... [RESOL]
[PHP] SWITCH , registers globall off, pb, notice [RESOL]BUG : session, header, switch... je sais pas d'où ça vient !
ASP-ORACLE "string literal too long"[postgresql/pgsql] IF - THEN - ELSE, syntaxe particulière ?
initialisation d'un tableau de stringutilisation de string hard !!
[MYSQL] Case sensitive ?Switch Case qui buggue étrangement d'un site à l'autre. [Résolu]
Plus de sujets relatifs à : Rempalcer des if/else avec des String en Switch/case avec des entiers?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)