Comment convertir un nombre entier compris entre 0 et 25 en caractères ASCII correspondants?

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).