C语言中怎么将数字字符转换成对应的数值

最近正在自学数据结构。在栈的运用中。计算后缀表达式时。怎么将数字字符转换成对应的数值 书上给的式子是
d=0;
while(ch>='0'&&ch<='9'&&flag) /*判定为数字字符*/
{ d=10*d+ch-'0';
ch=exp[t];t++;
}
d=10*d+ch-'0';这个式子的原理是什么?
将数字字符转换成对应的数值的原理是什么。为什么每次d都要置为0

ch-'0'是计算每个数字字符在数字中所对应的位置,较难理解的是10*d ,因为输入的是多个数,每次计算完一个数字字符,依然处在循环中带入下一次的计算,因此10*d的作用就是把上一次算得的结果往高位送,每乘以一个十就高一位。
说得不大清楚,不清楚的话还请见谅啊!
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-20
在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。
字符串是以“\0”作为结束符。
C/C++提供了丰富的字符串处理函数,下面是几个最常用的函数:
● 字符串输出函数puts。
● 字符串输出函数gets。
● 字符串连接函数strcat。
● 字符串复制函数strcpy。
● 测字符串长度函数strlen。
第2个回答  2010-07-27
没看懂你说的树上那段

字符是按照ASCII码排的(见百度百科“ASCII码”词条)
其中第48个码为'0'
然后顺次是'1','2',...,'9'
所以说 一个字符a='6',那么a与'0'距离就是它代表的数值,也就是6
所以
char a='6';
int k=a-'0';

那么k=6本回答被网友采纳
第3个回答  2010-07-28
字符相减就是 字符的阿斯克码相减,数字字符有事从‘0’到‘9’挨着,他们的阿斯克码也是从48到57挨着的,每个字符减‘0’得到的距离就是字符对应的数值。
d=10*d+ch-'0' 若d不置为0 那不成两位数了,数字字符只有0-9
至于为什么多此一举 而不是d=ch-‘0’ 这个高人指点啊
第4个回答  2010-07-28
ASCII码方式转换吧,每个字符都有一个ASCII码对应,就是数字。
不知道这段代码具体在程序的哪个部分,如果d不置零,会因为之前的程序运行,d已经有值,和预期的结果不同
相似回答