我是不是很笨

gww009 2009-12-30 05:33:13

int atoi(char *s)
{
int sign=1,m=0;
if(*s=='+'||*s=='-') /*判断是否有符号*/
sign=(*s++=='+')?1:-1; /*用到三目运算符*/
while(*s!='\0') /*对每一个字符进行操作*/
{
m=m*10+(*s-'0');
s++; /*指向下一个字符*/
}
return m*sign;
}

我在书上看到这个函数,我看其中的 m=m*10+(*s-'0');这句
我看了2个小时都还不会自己写,
我是不是很笨啊?
...全文
521 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
gww009 2009-12-31
  • 打赏
  • 举报
回复
while(*s!='\0') /*对每一个字符进行操作*/
{
m=m*10+(*s-'0');
s++; /*指向下一个字符*/
}


这是个递归吗? 如果是递归那么可以自己用堆栈来写吗?
gww009 2009-12-31
  • 打赏
  • 举报
回复
[color=#FF0000]while(*s!='\0') /*对每一个字符进行操作*/
{
m=m*10+(*s-'0');
s++; /*指向下一个字符*/
}
color]

这是个递归吗? 如果是递归那么可以自己用堆栈来写吗?
jvs 2009-12-31
  • 打赏
  • 举报
回复
字符型与数值型的转换
赵4老师 2009-12-31
  • 打赏
  • 举报
回复
VC6调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
fanchangyong 2009-12-31
  • 打赏
  • 举报
回复
建议使用有意义的单词作变量名,这样谁都可以看明白.
程序语言和自然语言一样,都是为了表达你的思想.
slowgrace 2009-12-31
  • 打赏
  • 举报
回复
在方法体里面调用自身的就是递归,循环里面没有
shortsweet 2009-12-31
  • 打赏
  • 举报
回复
你应该先把c的基础学好,再来看就简单了
vssvss 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 versaariel 的回复:]
经验不足而已,你才学2小时而已,有耐心,有信心
[/Quote]不是吧 才2个小时 (*s-'0')这个意思就是说 如果*s是数字字符(char型'2')的话,-'0'就变成(int型2)
duyalong 2009-12-31
  • 打赏
  • 举报
回复
本来以为*s是表示地址。。。汗一个
csdnfan 2009-12-31
  • 打赏
  • 举报
回复
也不是啊,你没有用心去看哦。 m=m*10+(*s-'0'); 就是 m=(m)*(10)+((*s)-('0'));
jmulxg 2009-12-31
  • 打赏
  • 举报
回复
有时候,笨不是真相……
真相是经验太少,见识不够

~~
hacker1125 2009-12-31
  • 打赏
  • 举报
回复
不笨的,是经验不足,多学多做,以后自然就明白。。。

只是你接触少罢了
lyj2009 2009-12-31
  • 打赏
  • 举报
回复
写多了就会了。
小瑞 2009-12-31
  • 打赏
  • 举报
回复
不知道
某某9 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 gww009 的回复:]
while(*s!='\0') /*对每一个字符进行操作*/
  {
  m=m*10+(*s-'0');
  s++; /*指向下一个字符*/
  }

这是个递归吗? 如果是递归那么可以自己用堆栈来写吗?
[/Quote]
这是循环,递归是直接或间接的调用自身
小魔菇 2009-12-31
  • 打赏
  • 举报
回复
不是笨哈 是看的和写的太少了
虾米 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
有时候,笨不是真相……
真相是经验太少,见识不够
[/Quote]

是这样的啊
Allenzhuy 2009-12-31
  • 打赏
  • 举报
回复
多练~~!
r_swordsman 2009-12-31
  • 打赏
  • 举报
回复
m=m*10+(*s-'0');

(*s-'0') // 取 s 指向的字符所表示的十进制数,例如 s 指向的是 '6' 那么结果就是数字 6
m*10 // 把上次的结果向高位移位, 例如 m 为 9,那么结果就是 90

m=m*10+(*s-'0') // 结合起来就是把s 指向的字符转成 m*10 的个位数
例如, m 为 9, s 指向的是 '6' , 那么结果就是 96
即 9 * 10 + (6)

这个函数就是将数字字符串转换成数字
例如,将"96" 转换成96

上面好多人都说了..我看lz也不一定懂(懂也不会问了 ^_^)..我替lz总结一下
daxiao474 2009-12-31
  • 打赏
  • 举报
回复
不要担心啦 等你多学啦几门编程语言 以及数据结构之类的 你都会慢慢的觉得简单的
加载更多回复(34)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧