黑马程序员技术交流社区
标题:
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