1.字符转数字的原理
在 ASCII 编码里,数字字符 '0'
到 '9'
对应的十进制值是连续的,范围从 48 到 57。
当进行 c - ‘0’
运算时,实际上是用字符 c
的 ASCII 值减去字符 '0'
的 ASCII 值(也就是 48),这样就能得到该字符对应的数值。
下面举例说明:
- 假设
c
为字符'5'
,它的 ASCII 值是 53,'0'
的 ASCII 值是 48,那么'5' - '0'
就等于53 - 48 = 5
,这正是我们想要的数值。 - 要是
c
不在'0'
到'9'
这个区间内,运算得出的结果就没有意义了。所以,在使用这行代码之前,一般需要先用isdigit(c)
对字符进行检查
#include <stdio.h>
#include <ctype.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->data[++(s->top)] = value;
} else {
printf("Stack overflow!\n");
}
}
int main() {
Stack s = {.top = -1}; // 初始化栈
char c = '7';
if (isdigit(c)) {
push(&s, c - '0'); // 将字符 '7' 转换为数字 7 并压入栈
printf("Pushed: %d\n", s.data[s.top]); // 输出:Pushed: 7
}
return 0;
}