Posez votre question Signaler

Compare :chaine de char en C

sagemoi - Dernière réponse le 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 ?
Lire la suite 

Compare :chaine de char en C »

11 réponses
Réponse
+7
moins plus
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.
sagemoi - 3 juin 2002 à 13:40
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 !
Peguinette- 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."
Guyzo Tate - 22 janv. 2012 à 09:26
je veux comparer deux chaines de caracteres
quelle set la commande?
Ajouter un commentaire
Réponse
+1
moins plus
encore merci
Ajouter un commentaire
Réponse
+0
moins plus
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
sagemoi - 3 juin 2002 à 12:46
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
asevere- 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
Ajouter un commentaire
Réponse
+0
moins plus
>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 :-/
sagemoi - 4 juin 2002 à 13:00
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Ce document intitulé « compare :chaine de char en C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?