黑马程序员技术交流社区

标题: c语言 模仿atoi函数求注释~ [打印本页]

作者: 奇幻大虾    时间: 2015-1-10 21:06
标题: c语言 模仿atoi函数求注释~
#include <stdio.h>
#include <string.h>
int fatoi(char str[])
{
    int s=0,n,i=0,num=0;
    n=strlen(str);
    if(str[0]=='-')
        i=1;
    if(n>10)//n为何>10
        return 0;
    for (;i<n;i++)
    {
        num=(str[i]-48);//48求解释~不懂
        s=s+num;
        if(i<n-1)
           s=s*10;
    }
    if(str[0]=='-')
        s=-s;
    return s;
}
int main()
{
    char sc[10]={"12367890"};   // 调试程序用的数据
          int n;
    n=fatoi(sc);
    printf("\n%d",n);
    getch();
          return 0;
}



作者: jojo    时间: 2015-1-10 21:06
48是字符‘0’对应的ASCII码值,取每个位上的数字,都 需要用对应位上的字符与‘0’字符相减,比如“12367890”中的‘9’,‘9’-'0' = 9 了,这下明白了吧
作者: 陈旭刚520    时间: 2015-1-10 22:36
c语言不懂   java略懂一二
作者: jyl3203217    时间: 2015-1-11 10:54
对c语言不是太感冒
作者: pj1988    时间: 2015-1-11 11:42
代码:if(n>10)//n为何>10
说明:n 表示的是字符串的长度,如果该字符串能转换成整型数,则表示了整数的位数(符号算1位)。
在内存中int占用4个字节(32 bit),除去符号位还有31 bit,能表示的最大整数不到10亿,
做为十进制整数小于10位(例如,十进制整数231,有3位),所以一个字符串转换成整数的位数过大(例如超过9位),int 类型存放不下,所以要抛弃。

代码:num=(str[i]-48);//48求解释~不懂
说明:正如一楼(@jojo)所说,48是字符‘0’对应的ASCII码值,'0' ~ '9' 中任意一个字符减去48就能得到这个字符所对应的整数值
作者: zhaojiajun    时间: 2015-1-11 13:00
楼上正解
作者: 小徐_y8nUx    时间: 2015-1-13 12:07
学习了!!
作者: 284373267@qq.co    时间: 2015-2-6 23:53
#include <stdio.h>
#include <string.h>
int fatoi(char str[])
{
    int s=0,n,i=0,num=0;
    n=strlen(str);      //获取str 字符串长度
    if(str[0]=='-')     //如果第一个字符为“-” 负号
        i=1;            //将下标设置为1,表示第一个(下标为0的字符)  不处理 ,从第二个字符开始处理
    if(n>10)            //n为何>10  ,只处理长度为10的字符。
        return 0;       //表示,超过字符长度
    for (;i<n;i++)      //循法 i的初始值由上面if 来定,如果不为“-” 则为 0 ,否则为1
    {
        //num=(str[i]-48);//48求解释~不懂     其实字符在计算机中是一个整数值,如 字符'0' 整数值asc2码是 48   'a' 好像是97  
        num=str[i]-'0';   //上面等价于这句
        s=s+num;        //求和,获取第一位整数值
        if(i<n-1)       //各位不需要进位,所以 i<n-1 注意,n-1就是最后一位(下标从0开始,100个数,那么是0 到 99 最后一个数为 100-1) 不需要进位
           s=s*10;      //进位
    }
    if(str[0]=='-')     //第一位为"-"符号  负号,
        s=-s;
    return s;
}
int main()
{
    char sc[10]={"12367890"};   // 调试程序用的数据
          int n;
    n=fatoi(sc);
    printf("\n%d",n);
    getch();
          return 0;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2