c-如何将0到25之间的整数转换为相应的ASCII字符



假设我有一个与ASCII字符a相对应的数字0。如何将025范围内的数字转换为字母表中的字母?

我已经尝试将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");
}

应该将%c转换为printf,而不是%d。格式说明符告诉printf如何解释提供的参数。如果传递%d,它将把参数解释为一个整数。通过指定%c,您可以告诉它将参数解释为字符。printf的手册页/帮助最终会导致一些"格式说明符",从而为您提供完整的列表。

就我个人而言,我倾向于使用someValue + 'a'someValue + 'A',因为我发现遵循代码会更容易一些。

算法是对数字进行"a",您已经通过添加97来完成了这一操作。但是,您应该在printf 中使用字符说明符而不是十进制说明符

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

这将ascii字符而不是"console"的十进制表示形式。

此外,您不需要typedef。

一个更通用的解决方案不采用ASCII,而是使用编译器的执行字符集。

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

你可以反转操作

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

由于strchr返回一个指向字符的指针,减去基数得到一个ptrdiff_t,表示两个"点"之间的偏移量,该偏移量是序列成员的序数。但只有当字符存在时,否则从不属于同一"对象"的两个地址获取ptrdiff是未定义的行为;你可能会得到一个毫无意义的负数。

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值

这个答案是迟来的

像这样铸造:(char) i

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

对于代码高尔夫比赛(以防万一),请适当使用(char)ichar c=i;。PPCG.GA。

您可以使用Character.toChars(x+97)[0]来获取char值,也可以使用(char)(x+99)进行强制转换。

相关内容

  • 没有找到相关文章

最新更新