Compare :chaine de char en C

Fermé
sagemoi - 3 juin 2002 à 12:36
 Guyzo Tate - 22 janv. 2012 à 09:26
char Chaine[2];
...

if ( Chaine == 'N1' ) printf ("vu N1\n");

le compilateur me jette :
Character constant 'N1' has more than one character.

comment faire simple ?
A voir également:

5 réponses

Attention !

quand tu fais Chaine == 'N1' tu ne compare pas 2 chaînes,
mais 2 pointeurs !

(Une chaîne est un pointeur sur un tableau de char).

Tu dois utiliser strcmp() pour comparer 2 chaînes.
7
c'est vrai !
donc il faut test le result du strcmp

mais alors comment fait on pour un switch case
d'une chaine de char ?

merci du rappel strcmp
fautqu'je li !
0
Peguinette Messages postés 176 Date d'inscription vendredi 15 juin 2001 Statut Membre Dernière intervention 17 juillet 2003 30
3 juin 2002 à 18:09
Je suis d'accord aussi, il faut utiliser strcmp.

Mais il y a autre chose :
qd tu fais Chaine == 'N1' , tu compares ta chaine avec 1 caractere.
Or N1 c'est 2 caracteres.

Le simple cote est utilisé pour un caractere, et le double cote pour une chaine de caractere

Peguinette...
"Petit à petit on devient moins petit."
0
je veux comparer deux chaines de caracteres
quelle set la commande?
0
encore merci
1
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
3 juin 2002 à 12:41
salut alors si je me reppel bien en c pour une chaine de deux caractére il fo un char[3] pour '\0' (fin de chaine)
voila ca va peut-etre t aider...
si j ai une autre idée je reviens...

bye
0
negatif
car dans les 3 petits points il y a deja '\0' dans Chaine[2]
de plus le tableau a deja 3 cases ( 0 1 et 2 )

merci tout de meme
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
3 juin 2002 à 14:09
exact autant pour moi!
va falloir que je m'y remette serieux la...
j avais encore jamais faisz un telle bourde
0
>mais alors comment fait on pour un switch case
>d'une chaine de char ?

J'ai plusieurs solutions:

Solution 1 : Tout ce qui n'est pas Python est souffrance. La disparition de la souffrance peut être atteinte en ne programmant pas en non-Python.

Solution 2 : si tu as une classe String, ça sera plus vite fait, mais comme on est en C et pas en C++, c'est raté.

Solution 3 : si tu as des routines de CRC ou de hash quelqconque, tu peux calculer un hash de la chaîne et faire un switch sur la valeur du hash.
Pas la peine de taper dans le MD5 ou SHA512: Si la chaîne est courte, une simple CRC16 suffira largement. On trouve des routines de CRC16 très rapides.

Solution 4 : faire plein de if strcmp()... (je sais c'est pas bô, mais en C brut de fonderie, j'ai pas mieux :-/
0
merci pour ton message seb
cependant
peut tu developper la solution 2 en plus clair que la solution 3
laquelle ne m'a pas paru vraiment limpide :

quézako CRC , hash ,MD5 ,SHA512

merci de redescendre sur la planete bleu que ses habitants appelent la terre .


pour la solution1 : je ne connais pas Python (de quel langage cela ce rapproche?)
pour la solution 4 : c'est justement parceque je ne trouve pas ca beau que je rencheri sur la question

merci encore
0

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

Posez votre question
Bien !

1) Python est un langage de script objet, clair, facile à apprendre, opensource, bourré de routine toutes prêtes, multiplaforme et ouvert (on peut l'interfacer avec d'autres langages comme C, C++, etc.) Voir http://www.python.org et http://www.rimbault.net/python.


2) La majorité des compilateurs C++ sont fournis avec des classes String (pas toujours super-bien construites, mais bon). Elles surchargent généralement l'opération de comparaison, ce qui permet - il me semble - de les utiliser dans les switch (arrêtez-moi si je dis une connerie).


3)
Le hashage est une opération très simple:
C'est une moulinette qui prend en entrée un nombre quelqconque d'octets et qui sort un nombre fixe d'octets.
Ces octets en sortie sont une sorte d'empreinte de la chaîne en entrée.
Deux chaînes identiques auront 2 hash identiques.
Si tu as 2 hash identiques, tu peux être sûr à 99,9999999% que les chaînes d'origine sont identiques.

Les hash sont massivement utilisés: dans les fichiers archive (ZIP, RAR...) pour s'assurer que les fichiers ne sont pas endommagés ; dans tous les systèmes d'exploitation pour vérifier la validité d'un mot de passe sans avoir à le stocker ; en crypto (ex:échanges bancaires, PGP, SSL/HTTPS...) pour signer des messages ou des certificats ; dans les bases de données pour construire des indexes ; etc.

Les hash étant généralement courts (ex: 32 bits pour une CRC32), l'ordinateur sait très bien les utiliser comme des nombres et les comparer dans des switch.
Il est plus facile de comparer 2 entiers (2 hashs) que 2 chaînes de caractères (c'est d'ailleurs ce qui est fait dans les bases de données pour les clés primaires).

Il existe différents types de hash (ou CRC). Pour comparer des chaînes de quelques centaines d'octets, une CRC16 suffit largement.
0