[c] nchiffre[c-'0'] [Fermé]

Signaler
Messages postés
275
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
7 octobre 2006
-
Marden
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
-
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

Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 470
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... :-)
Messages postés
275
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
7 octobre 2006
27
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
???
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 470
Mais je ne comprend toujours pas pourquoi on veut enlever '0' a i
???

Ca je sais pas....
Messages postés
275
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
7 octobre 2006
27
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
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
206
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'.