C编程语言K& R中的atoi函数

时间:2013-11-26 05:16:25

标签: c for-loop atoi

我完全不知道这个循环是做什么的。

int atoi(char s[])
{    
     int i, n;


     n = 0;
     for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
         n = 10 * n + (s[i] - '0');
     return n;
}

这部分我没有得到:

for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
     n = 10 * n + (s[i] - '0');

我在括号内得到了整个for循环,以及s [i] - '0'的作用。 但我不知道这里正在进行什么样的操作 - &gt; n = 10 * n

我不知道n代表什么,为什么乘以10。 我知道它将数字字符串转换为数字等价物,但我只是没有得到整个操作。

2 个答案:

答案 0 :(得分:4)

  

但我不知道这里正在进行什么样的操作 - &gt; n = 10 * n

这就是你如何逐位建立一个数字。它与你编写计算器时的工作方式基本相同。如果我写了一个简单的计算器,这就是它如何处理输入 5 4 7

  1. 从0开始
  2. 5 ==&gt; 0 * 10 + 5 = 5
  3. 4 ==&gt; 5 * 10 + 4 = 54
  4. 7 ==&gt; 54 * 10 + 7 = 547
  5. 基本上,atoi完全相同,但不是从按下按钮读取每个数字,而是从字符串中读取它们。每次读取新数字时,都会n *= 10为下一个数字腾出空间,直接在最后添加数字。

答案 1 :(得分:1)

n是已经处理过的数字。例如,对于字符串"123",首先,程序获得数字1,将其转换为整数并将其存储在n中,然后获取下一个数字2,这是n = 10 * n有用的地方,之前的1乘以10,并添加到下一个数字2,结果是12,这是存储为当前n

同样如此,处理3时,先前存储的12乘以10,结果为120并添加到3,结束结果为123