Как преобразовать целые числа от 0 до 25 в соответствующие символы ASCII? - PullRequest
2 голосов
/ 31 мая 2011

Скажем, у меня есть номер 0, который соответствует символу ASCII a.Как бы я мог преобразовать число в диапазоне от 0 до 25 в буквы алфавита?

Я уже пытался добавить 97 к десятичному значению, но он просто выводит число + 97.

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");
}

Ответы [ 6 ]

4 голосов
/ 31 мая 2011

Вы должны вставить %c в printf, а не %d. Спецификатор формата, сообщает printf, как интерпретировать предоставленные параметры. Если вы передадите %d, аргументы будут интерпретированы как целое число. Указывая %c, вы указываете ему интерпретировать аргумент как символ. Manpages / help для printf в конечном итоге приводят к некоторым «спецификаторам формата», что дает вам полный список.

Лично я склонен использовать someValue + 'a' или someValue + 'A', потому что мне немного легче следовать коду.

2 голосов
/ 12 января 2013
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");
}

Это изменение преобразует число или любой символ в его значение ASCII

2 голосов
/ 31 мая 2011

Более общее решение не предполагает ASCII, но работает с набором символов выполнения компилятора.

char *vec = "abcdefghijklmnopqrstuvwxyz";
printf("'%c'", vec[0]); //prints 'a'

И вы можете полностью изменить операцию

int i = strchr(vec, 'm')-vec;

Поскольку strchr возвращает указатель на символ, вычитание основания дает ptrdiff_t, представляющее смещение между двумя «точками», это смещение является порядковым номером члена последовательности. Но только если присутствует символ, в противном случае это неопределенное поведение - брать ptrdiff с двух адресов, которые не являются частью одного и того же «объекта»; вы, вероятно, получите бессмысленное отрицательное число.

2 голосов
/ 31 мая 2011

Алгоритм заключается в 'a' для ваших чисел, что вы уже сделали, добавив 97. Однако вы должны использовать символьный спецификатор вместо десятичного спецификатора в printf

 printf("%c", numbers[i] + 'a');

Это будет символ ascii, а не десятичное представление в консоли.

Кроме того, вам не нужен typedef.

0 голосов
/ 06 мая 2016

Этот ответ опоздал

Примените его так: (char) i

char c = (char) i // Cast not needed on variable assignment
                  // It's recommended to put it there, no complications needed

Для в соревнованиях (простов случае), используйте (char)i и char c=i; соответственно. PPCG.GA для таких конкурсов.

0 голосов
/ 31 мая 2011

Вы можете использовать Character.toChars (x + 97) [0], чтобы получить значение char, или просто использовать (char) (x + 97).

...