码迷,mamicode.com
首页 > 其他好文 > 详细

不使用库函数将字符串转换为数字

时间:2015-11-05 00:46:15      阅读:366      评论:0      收藏:0      [点我收藏+]

标签:整数   字符串   

技术分享

技术分享


第14行,把参数n的绝对值赋给temp,以后在计算各个位的整数时用temp,这样保证在负数情况下取余不会出现问题。

第20行,取整数最末尾的数字,+‘0‘是将其转换为字符,

第21行,取剩余数字,

当执行完while(temp)这个循环,就将该整数的所有位都从右到左的剥离出来,并依此存于buf数组中,例如temp=123,则此时buf[0]=3,buf[1]=2,buf[2]=3,这是倒序的。

第24行,计算转换后字符串的长度,如果是负数,长度还应该再加1,因为还要存放负号。

第27行开始的while(1)循环中,把buf数组中非0元素逆向复制到参数str指向的内存中去,这里有一个很重要的地方,就是前面第12行必须赋初值,即char buf[10]=""; 如果没有后面的 ="",而是只有char buf[10],那么在执行while(1)循环时,就无法判断buf数组中具体是哪一个元素为0


举个例子,如果n=123,那么length=3,则buf数组存储完buf[0],buf[1],buf[2]之后,就会跳出,那么buf[3]=0;

          如果n=-123,则length=4,  buf数组也是存储完buf[0],buf[1],buf[2]之后,就会跳出,那么buf[3]=0;

所不同之处在于,执行while(1)循环时,判断if(buf[length-i-1]==0)  break; 由于length的不同,要想break,所需要执行的次也不同,n=123时,需i=-1,即 3-(-1)-1时,才能得到buf[3],方能break;而n=-123时,由于length=4,只需i=0时,就可得到buf[3],就能break;

那么,我们只需判断最终跳出while(1)循环时,i的数值,就能判断n原本是正数还是负数

i=-1时,n是正数

i=0时,n时负数,需要令str[0]=‘-‘

不使用库函数将字符串转换为数字

标签:整数   字符串   

原文地址:http://tangxiaoguo.blog.51cto.com/10692989/1709827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!