Titre: [C] Problème de comparaison de caractère. [résolu] Posté par: mogg41 le 22 Mars 2008 à 15:15:10 Bonjour à tous.
Je dois faire pour les cours un programme lisant un fichier contenant 1000 mots de passe puis de les analysez afin de déterminer les caractères les plus probables. Le fichier est construit de la manière suivante: Il y a un mot de passe par ligne chacun composé d'une lettre (A ou B) puis de 4 chiffres. Par exemple B0548 ou A7321. Voici mon problème: J'ai essayé de récupérer les mots de passe avec cette ligne de code: Code: char lettre0; Mais le problème c'est que chiffre0 enregistre les 4 chiffres... Je ai donc utilisé ce bout de code: Code: char lettre0,char0,char1,char2,char3; Je dois ensuite tester chaque caractère pour pouvoir comptabiliser le nombre 0, de 1... dans les mots de passe. J'utilise ce bout de code: Code: int compteur=0; Le problème est que pour comparer un char il faut mettre la syntaxe suivante char0=='k'; mais en utilisant cette syntaxe il me compare char0 à la lettre k et non pas à sa valeur... J'ai réussi à comparer chaque caractère en utilisant un switch avec 10 possibilités, mais ce n'est pas du tout propre! Peut être est-il possible de caster mon char0 en int mais il me semble qu'ils ne sont pas codées sur le même nombre de bits. En espérant que vous aurez le courage de me lire et que vous aurez une piste pour moi, je vous souhaite de bons challenges! Mogg41 Titre: Re : [C] Problème de comparaison de caractère. Posté par: WiebeN le 22 Mars 2008 à 15:26:22 A coup de fscanf tu te compliques un peu la vie à mon avis...
Moi je récupérerais chaque mot de passe avec un fgets, j'enlèverais le '\n' du dernier caractère et ensuite tu fais un boucle pour comptabiliser chaque caractère... Un peu laborieux aussi, des pros trouveront probablement un algo bien plus performant mais celui ci devrait marcher ! (MP si besoin de plus de détails ou questions) EDIT: en fait en y réfléchissant le mieux c'est de lire une fois tous les caractères du fichier, et de les comptabiliser directement. Jsais pas si je vais avoir le temps de te faire un code d'illustration, sinon ce sera ce soir. Titre: Re : [C] Problème de comparaison de caractère. Posté par: WiebeN le 22 Mars 2008 à 15:53:26 Voilà :
Code: #include <stdio.h> Titre: Re : [C] Problème de comparaison de caractère. Posté par: _o_ le 22 Mars 2008 à 16:24:25 Le problème est que pour comparer un char il faut mettre la synthaxe suivante char0=='k'; Non, ce n'est pas la seule syntaxe¹ : le type char est un numérique contenant le code ascii. On peut donc le comparer à une valeur numérique sans cast. Voir utiliser cette valeur comme indice dans un tableau. ¹: sans h. Au contraire d'algorithme. Titre: Re : [C] Problème de comparaison de caractère. Posté par: Spaulding le 22 Mars 2008 à 16:25:04 Je ne suis pas sur de tout bien comprendre donc de savoir si ça va t'aider, mais il se trouve qu'en ASCII, les chiffres ont la "magie" d'être codé de 30 à 39 (en hexa) => 'x'-0x30 = x.
Titre: Re : [C] Problème de comparaison de caractère. Posté par: mogg41 le 22 Mars 2008 à 16:50:00 Merci pour vos réponses.
Je me suis renseigné sur le type char et j'ai trouvé ceci: Citation Caractère (char) Source:http://www.commentcamarche.net/cpp/cpptype.php3Le type char (provenant de l'anglais character) permet de stocker la valeur ASCII d'un caractère, c'est-à-dire un nombre entier ! Par défaut les nombres sont signés, cela signifie qu'ils comportent un signe. Pour stocker l'information concernant le signe (en binaire), les ordinateurs utilisent le complément à deux. Une donnée de type char est donc signée, cela ne signifie bien sûr pas que la lettre possède un signe mais tout simplement que dans la mémoire la valeur codant le caractère peut être négative... Si jamais on désire par exemple stocker la lettre B (son code ASCII est 66), on pourra définir cette donnée soit par le nombre 66, soit en notant 'B' où les apostrophes simples signifient code ascii de... Il n'existe pas de type de données pour les chaînes de caractères (suite de caractères) en langage C. Pour créer une chaîne de caractères on utilisera donc des tableaux contenant dans chacune de ses cases un caractère... Cela m'a permis de résoudre mon problème en modifiant un petit peu mon code: Code: int compteur=0; Merci encore. Mogg41 Titre: Re : [C] Problème de comparaison de caractère. [résolu] Posté par: WiebeN le 22 Mars 2008 à 19:28:42 Oui +48 ou +'0' marche aussi très bien
|