Switch texte

lastpixl Messages postés 56 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 16 février 2006 - 12 févr. 2004 à 21:10
lastpixl Messages postés 56 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 16 février 2006 - 13 févr. 2004 à 20:28
Est-il possible de faire un switch sur du texte ? Mon compilateur me fait une erreur à chaque fois que j'essaie avec une chaine.

ca marche avec un char, pas avec un char[x] ni un char*...

Donc je suis obligé de faire une succession de if else if else if... ?

+++
Lastpix'l

11 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 févr. 2004 à 21:20
je pense que tu peux faire avec un char* si tu fais un transtypage vers int, mais ce n'est pas sur que tu auras le résultat souhaité, car si tu veux comparer des char* (leur contenu), il faut utiliser strcmp. SI c'est ca que tu veux faire, tu devra faire une succession de if avec des strcmp
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 févr. 2004 à 21:24
Bonjour,

Tu ne peux pas le faire sur une chaine entière mais avec un caractère.

Si tu as un char *

tu peux faire :

switch( tolower( *szbuff[0] ) )

Pour le faire sur une chaine entiere tu peux faire :

int c;
while ( c = *szbuff++ ) {
switch ( c )

@+
Arnotic
Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 févr. 2004 à 21:41
*szbuff[0]: moi je dirais plutot *szbuff ou szbuff[0], non?
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
12 févr. 2004 à 21:42
Si ton texte a comparer est static (il ne change pas), alors tu fais un tableau de chaine de characteres. Apres tu fais une boucle.

Si tu en as beaucoup a tester et que ton programme deviens lent, alors regarde :

> http://www.cppfrance.com/code.aspx?ID11113
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 févr. 2004 à 21:48
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
12 févr. 2004 à 21:53
Ouh la... vous croyez pas que vous allez un peu loin là ???

D'abord rappel de MSDN :
Specifies an int, char, enum type, or an identifier that resolves to one of these types.

En clair switch ça ne marche qu'avec les entiers (ou eventuellement les caractères puisque ce sont des entiers) mais pas avec char*

Le mieux c'est simplement d'utiliser if et elseif !!! Et pour comparer les chaines il suffit d'utiliser strcmp

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 févr. 2004 à 21:56
oui mais un char* c'est aussi un entier puisque c'est une adresse, mais ca n'a aucun interet de comparer des adresses pour ca
Arnotic, ton lien n'explique pas ton *szbuff[0]
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 févr. 2004 à 22:55
Bonjour,

Effectivement nous pouvez comparer des caractères puisqu'ils sont eux même un nombre donc un int.

Si tu veux comparer les chaines ils existes des fonctions comme strcmp() ou bien strstr() qui permet de savoir si une chaine contient une autre chaine.

Concerant le *szbuff[0] fait l'experience de se que sa retourne.

@+
Arnotic
Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 févr. 2004 à 18:30
ca retourne ca: error C2100: indirection non conforme
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
13 févr. 2004 à 19:11
bah c'est totalement logisque :
buf[0] est un caractere
*buf aussi car sans grand surprise : buf[0]=*buf

or faire une indirection (*) sur un caractere ne veut rien dire, d'ou une erreur !!!

en ce qui concerne un switch, un switch ne prend que des valeur d'entier (int) et constant
0
lastpixl Messages postés 56 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 16 février 2006
13 févr. 2004 à 20:28
Merci a tous... Je vais utiliser des if else if...
Je n'ai que quelques possibilités à tester, donc pas besoin de la source de JCDjcd

+++
Lastpix'l
0
Rejoignez-nous