[c] nchiffre[c-'0']

Fermé
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 - 20 août 2005 à 00:18
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 - 20 août 2005 à 23:30
Salut a tous !
Allors voila j'apprend le C , j'ai un script que je ne comprend pas enfin plus précisément une petite partie :
voici déja un bout du script :
if (c >= '0'' && c <= '9')
++nchiffre[c-'0'];

je ne comprend pas pourquoi : -'0'
il y a 2 cas :
- le -'0' enléve 0 a c (c-0 ex : 3-1 ===> 2) donc il n'y a pas vraiment d'intéret.
-le -'0' enléve le caractére 0 a c ( ex : 10 - 0 ===> 1 ) mais pour moi ce n'est pas vraiment possible vu que c ne peut contenir que 0,1,2,3,4,5,6,7,8,9.
Peut être pour faire
++nchiffre[] ( dans le cas ou c = 0 )
Mais que ce passe t-il si il n'y a pas le numéro de l'entree du tableau???
Désolé si c'est un peu béte mais j'ai perdu mon ceveaux !!!
D'avance Merci !!!

5 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 août 2005 à 00:54
Salut,

C'est encore moi :-)

C'est une subtilité de types.

En C, un caractère est en fait stocké dans une variable comme une valeur numerique.
C'est la fameuse norme ascii:
http://www.lookuptables.com/

Ce qui fait que si tu stockes le caractère 'a' dans la variable machin:
char machin='a';
Et bien machin sera en fait égal à 97. (Voir le tableau ascii).
Si après tu utilises une fonction comme putchar(), il pourra te traduire le 97 en 'a'.

Ca fonctionnera aussi avec une variable entière, essaie:
int truc=97;
putchar(truc);
Tu aura 'a' affiché à l'écran.
Or pour réprésenter un chiffre en tant que caractère, on utilise la même norme. Un chiffre caractère ne fonctionne pas du tout comme un chiffre 'brut'.
Dans une variable, 0 aura la valeur de 0.
Par contre '0' (note les guillemets) aura pour valeur 48.

Voilà voilà :-)

Désolé si c'est un peu béte mais j'ai perdu mon ceveaux !!!

C'est pas bête, en fait les caractères, chaines de caractères, tableaux, pointeurs c'est le plus dur dans les bases du c.
D'autant qu'une guillemet simple n'aura pas du tout la même signification qu'une guillemet double. Et une guillemet simple ou double en c n'a pas la même signification qu'en Php. (D'ailleurs en Php une guillemet simple ou double n'a pas la même signification non plus, bref... :-)
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
20 août 2005 à 14:33
Super j'ai retrouvé un petit bout !!!!
Merci pour le tableau ascii c'est bien pratique !!!
Mais je ne comprend toujours pas pourquoi on veut enlever '0' a i
???
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 août 2005 à 15:46
Mais je ne comprend toujours pas pourquoi on veut enlever '0' a i
???

Ca je sais pas....
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
20 août 2005 à 15:54
enfait on veu mettre les 110 entrés de nchiffre à 0 puis ajouter 1 à nchiffre[i] ou i est le nombre en entree:
int c;
int nchiffre[10];
for (i = 0; i<10; ++i)
nchiffre[i] = 0;
...
if (c >= '0' && c <= '9')
++nchiffre[i-'0'];

avant de lire le script c'etait ecrit qu'il etait artificiel, peut être que sa ne sert a rien, c'est juste pour montrerce que l'on peut faire...
sinon je ne voi pas a quoi sa peut servir ???
Max
0

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

Posez votre question
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 208
20 août 2005 à 23:30
Les valeurs Ascii des caractères représentant les chiffres sont des valeurs consécutives. La soustraction de '0' à la valeur Ascii du caractère donne donc un résultat compris entre 0 et 9 (valeurs numériques) servant à adresser le tableau "nchiffre", dont chaque élément est le nombre d'apparitions du caractère correspondant.
Par exemple :
nchiffre[5] contient le nombre d'occurrences du caractère '5'.
0