atoi()实际上是如何工作的

时间:2014-06-18 07:55:52

标签: c atoi

这是代码:

#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)下一行计算字符串中的数字234n= 10*n+ ('2'-'0') =&gt; i获取2 =&gt; n = 10*2 + ('3'-'0') =&gt; i获取23,最后i获取数字234

并在最后一行将234-1+1相乘,无论答案是什么*

我能正确理解这段代码吗?

1 个答案:

答案 0 :(得分:4)

A1)不,它只计算行首的空格(标准的isspace()实现中的空格是'','\ t','\ n','\ v','\ f', '\ r';即空格,制表符,换行符,Feed和回车符。)

A2)是的,它确定了价值的标志。

A3)如果值为“234”,则不会增加i。但如果值为“+234”或“-234”,我们需要增加i(识别后面的数字)。

A4)是的。但不是'24'(它看起来像印刷错误;必须有'23')。