Switch texte

Signaler
Messages postés
56
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
16 février 2006
-
Messages postés
56
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
16 février 2006
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
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
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
*szbuff[0]: moi je dirais plutot *szbuff ou szbuff[0], non?
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
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
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
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]
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
ca retourne ca: error C2100: indirection non conforme
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
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
Messages postés
56
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
16 février 2006

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