假设我有一个与ASCII字符0
对应的数字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");
}
答案 0 :(得分:4)
您应该将%c
改为printf,而不是%d
。格式说明符告诉printf如何解释提供的参数。如果传递%d
,它会将参数解释为整数。通过指定%c
,您可以告诉它将参数解释为字符。 printf的联机帮助/帮助最终会导致一些'格式说明符',它会为您提供完整的列表。
就个人而言,我倾向于使用someValue + 'a'
或someValue + 'A'
,因为我发现遵循代码会更容易。
答案 1 :(得分:2)
算法是对你的数字'a',你已经通过添加97来完成。但是你应该使用字符说明符而不是printf
printf("%c", numbers[i] + 'a');
这将ascii字符不是'console'的十进制表示。
此外,您不需要typedef。
答案 2 :(得分:2)
更通用的解决方案不假设ASCII,而是使用编译器的执行字符集。
char *vec = "abcdefghijklmnopqrstuvwxyz";
printf("'%c'", vec[0]); //prints 'a'
你可以撤销操作
int i = strchr(vec, 'm')-vec;
由于strchr
返回指向字符的指针,减去基数会产生表示两个“点”之间偏移的ptrdiff_t
,此偏移量是序列成员的序数。但是只有当角色存在时,否则从两个不属于同一“对象”的地址中取ptrdiff
是未定义的行为;你可能会得到一个毫无意义的负数。
答案 3 :(得分:2)
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值
答案 4 :(得分:0)
这个答案迟到了
像这样投射:(char) i
char c = (char) i // Cast not needed on variable assignment
// It's recommended to put it there, no complications needed
答案 5 :(得分:-1)
你可以使用Character.toChars(x + 97)[0]来获取char值,或者只使用(char)(x + 97)进行强制转换。