首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解atoi()函数

理解atoi()函数
EN

Stack Overflow用户
提问于 2011-11-01 01:50:45
回答 6查看 17.4K关注 0票数 7

我是一名python程序员,正在从K&R书中学习C语言。这看起来是一个非常微不足道的问题,但我还是被难住了。下面是来自K&R的代码片段(RIP Ritchie!)这本书实现了atoi()函数。

代码语言:javascript
复制
atoi(s) /*convert s to integer */
char s[];
{
    int i, n, sign;
    for (i=0; s[i]==' '||s[i] == '\n' || s[i] == '\t'; i++)
    ;   /* skip whitespace */
    sign = 1;
    if (s[i] == '+' || s[i] = '-')  /* sign */
        sign = (s[i++] == '+') ? 1 : -1;
    for (n=0; s[i] >= '0' && s[i] <= '9'; i++)
        n = 10 * n + s[i] - '0';
    return (sign * n);
}

我的问题:

1)第一个'for‘循环除了计算有效字符的数量外,还有其他用途吗?

2)如果(1)为true,则第一个循环将'i‘的值设置为有效字符数-第二个for循环如何在不将i重置为0的情况下工作?

例如,我输入'2992‘作为函数的输入。第一个for循环将i设置为3,那么函数的其余部分是如何工作的呢?我可能会把我的基础知识弄得一团糟,但任何帮助都是非常感谢的。谢谢,-Craig

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-01 01:58:24

代码语言:javascript
复制
int atoi(char* str)
{
    if(!str)
        printf("Enter valid string");

    int number = 0;
    char* p = str;

    while((*p >= '0') && (*p <= '9'))
    {
        number = number * 10 + (*p - '0');
        p++;
    } 
    return number;
}

这是ATOI背后的整个想法。

1)将指针设置在char数组的开头

2)然后在while循环中遍历每个字符并乘以10,然后通过减去0将字符相加。

如果你想试试2992的话。这个数字也是2992。

票数 11
EN

Stack Overflow用户

发布于 2011-11-01 01:53:24

第一个循环做注释所说的:它跳过空格。

在它之后,i是第一个非空格字符的索引,这正是您继续操作所需的。

票数 4
EN

Stack Overflow用户

发布于 2011-11-01 01:53:33

不,正如注释所说,第一个循环跳过了空格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7957557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档