假设我有一个与ASCII字符a
相对应的数字0
。如何将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");
}
应该将%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)i
和char c=i;
。PPCG.GA。
您可以使用Character.toChars(x+97)[0]来获取char值,也可以使用(char)(x+99)进行强制转换。