这是代码:
#include <ctype.h>
/* atoi: convert s to integer; version 2 */
int atoi(char s[])
{
int i, n, sign;
for (i = 0; isspace(s[i]); i++) /* skip white space */
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-') /* skip sign */
i++;
for (n = 0; isdigit(s[i]); i++)
n = 10 * n + (s[i] - '0');
return sign * n;
}
Q1)第一行代码计算空格?这意味着它计算空间,输入,返回等?说我的字符串在两个空格后开始吗?在计算空格后,我的值增加了吗?
Q2)下一个符号行计算字符串是否类似于-234
?还是234
?
Q3)下一行是否有+
或-
符号计算i
已经计算过的空格增加了?是吗?
Q4)下一行计算字符串中的数字234
。 n= 10*n+ ('2'-'0')
=&gt; i
获取2
=&gt; n
= 10*2 + ('3'-'0')
=&gt; i
获取23
,最后i
获取数字234
并在最后一行将234
与-1
或+1
相乘,无论答案是什么*
我能正确理解这段代码吗?
答案 0 :(得分:4)
A1)不,它只计算行首的空格(标准的isspace()实现中的空格是'','\ t','\ n','\ v','\ f', '\ r';即空格,制表符,换行符,Feed和回车符。)
A2)是的,它确定了价值的标志。
A3)如果值为“234”,则不会增加i。但如果值为“+234”或“-234”,我们需要增加i(识别后面的数字)。
A4)是的。但不是'24'(它看起来像印刷错误;必须有'23')。