Disons que j’ai un nombre 0
qui correspond au caractère ASCII a
. Comment puis-je convertir un nombre compris entre 0
et 25
en lettres de l’alphabet?
J’ai déjà essayé d’append 97
à la valeur décimale, mais le nombre + 97
simplement généré.
typedef enum { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z } set; void dispSet(set numbers[], int size_numbers) { int i; printf("[ "); for (i = 0; i < size_numbers-1; i++) { printf("%d, ", ((char) numbers[i])+97); } printf("%d ]", ((char) numbers[size_numbers-1])+97); printf("\n"); }
Vous devriez passer %c
à printf, pas %d
. Le spécificateur de format indique à printf comment interpréter les parameters fournis. Si vous passez %d
, les arguments seront interprétés comme un entier. En spécifiant %c
, vous lui dites d’interpréter l’argument comme un caractère. Les pages de manuel / help pour printf mènent éventuellement à des “spécificateurs de format”, qui vous donnent la liste complète.
Personnellement, j’ai tendance à utiliser someValue + 'a'
, ou someValue + 'A'
, car je trouve un peu plus facile de suivre le code.
L’algorithme consiste à “a” pour vos nombres, ce que vous avez déjà fait en ajoutant 97. Cependant, vous devez utiliser le spécificateur de caractère au lieu du spécificateur décimal dans le printf
printf("%c", numbers[i] + 'a');
Ce sera le caractère ASCII pas la représentation décimale à la «console».
En outre, vous n’avez pas besoin de typedef.
Une solution plus générale ne suppose pas ASCII mais fonctionne avec le jeu de caractères d’exécution du compilateur.
char *vec = "abcdefghijklmnopqrstuvwxyz"; printf("'%c'", vec[0]); //prints 'a'
Et vous pouvez inverser l’opération
int i = strchr(vec, 'm')-vec;
Puisque strchr
renvoie un pointeur sur le caractère, la soustraction de la base donne un ptrdiff_t
représentant le décalage entre les deux “points”, ce décalage est l’ordinal du membre de la séquence. Mais uniquement si le caractère est présent, sinon le comportement non défini ptrdiff
à prendre un ptrdiff
partir de deux adresses qui ne font pas partie du même “object”; vous obtiendrez probablement un nombre négatif sans signification.
void dispSet(set numbers[], int size_numbers) { int i; printf("[ "); for (i = 0; i < size_numbers-1; i++) { printf("%d, ", ((char) numbers[i]) - '0'); } printf("%d ]", ((char) numbers[size_numbers-1]) - '0'); printf("\n"); }
Cette modification convertit un nombre ou n'importe quel caractère en sa valeur ASCII
Cette réponse est en retard
Le lancer comme ça: (char) i
char c = (char) i // Cast not needed on variable assignment // It's recommended to put it there, no complications needed
Pour les concours de code-golf (au cas où), utilisez (char)i
et char c=i;
de manière appropriée. PPCG.GA pour de tels concours.
Vous pouvez utiliser Character.toChars (x + 97) [0] pour obtenir la valeur du caractère ou simplement lancer avec (char) (x + 97).