c++代码求大佬讲解(我是一个刚入门的菜鸟)

安卓开发菜鸟 2020-02-15 08:09:43
这个应该是字符串指针的函数吧,但我看不懂这串代码,特别是第五行那里num+=…的那一行,不知道是什么意思,求大佬细细讲解一下。我用了VS2018编译了一下,但是就算是复制黏贴,编译器都说我代码有误运行不了,求大佬指点明津
...全文
92 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
安卓开发菜鸟 2020-02-16
  • 打赏
  • 举报
回复
引用 3 楼 qybao的回复:
看代码好像没问题啊 num += *str - ‘0’ 相当于 num = num + (*str - ‘0’) fun就相当于把字符串转成int 比如str = “1701” num 初始值为 0 while第一次进入循环 num *= 10 //num = 0 num += *str - ‘0’ // *str是‘1’,所以*str - ‘0’ = 1,num += 1,num=1,所以就相当于把str的第一个字符‘1’转成了1,其余依次类推
最后的答案得出来是多少呢
安卓开发菜鸟 2020-02-16
  • 打赏
  • 举报
回复
引用 4 楼 为什么我的头像是只猴子的回复:
首先num是一个int 整型, 第五行翻译一下就是这样 num = num + 字符1 - '0' 不同类型不能相加,当然会报错
我输代码的时候好像不是显示这一步错误,是显示后面的“1701”那一步错了,这行代码是书上的题目,我也好晕整不明白
安卓开发菜鸟 2020-02-16
  • 打赏
  • 举报
回复
引用 3 楼 qybao的回复:
看代码好像没问题啊 num += *str - ‘0’ 相当于 num = num + (*str - ‘0’) fun就相当于把字符串转成int 比如str = “1701” num 初始值为 0 while第一次进入循环 num *= 10 //num = 0 num += *str - ‘0’ // *str是‘1’,所以*str - ‘0’ = 1,num += 1,num=1,所以就相当于把str的第一个字符‘1’转成了1,其余依次类推
为啥*str是’1’呀,不太明白 还有那个num*=10这一步也不太明白
安卓开发菜鸟 2020-02-16
  • 打赏
  • 举报
回复
引用 9 楼 weixin_40290083 的回复:
就是把字符串转换成对应的十进制数字, *str就是当前位置上的字符,在内存中存放的是字符的ASCII码,而数字的字符的ASCII码不等于数字,所以需要使用 * str 减云‘0’的ASCII码,这样就计算也对应的数字。
好的谢谢明白了
安卓开发菜鸟 2020-02-16
  • 打赏
  • 举报
回复
引用 8 楼 qybao 的回复:
*str为什么是‘1’,自己找本最基础的入门书来看,然后弄清楚str++后,*str又是什么 num *= 10,相当于 num = num * 10 上面说了while第一次循环结束后,num=1,while第二次循环 *str为‘7’ num *= 10 //num = num * 10 = 1 * 10 = 10 num += *str - ‘0’ // num = num + (*str -‘0’) = 10 + (‘7’ - ‘0’) = 10 + 7 = 17 所以第二次循环结束num变为17 依次类推,最后num变为1701,所以最后输出结果就是1701 补充一点,*=,+=这样的运算符会隐式转换为=左边的类型,所以一般能转换成功就不会出错
哦哦明白了明白了谢谢谢谢🙏
weixin_40290083 2020-02-16
  • 打赏
  • 举报
回复
就是把字符串转换成对应的十进制数字, *str就是当前位置上的字符,在内存中存放的是字符的ASCII码,而数字的字符的ASCII码不等于数字,所以需要使用 * str 减云‘0’的ASCII码,这样就计算也对应的数字。
qybao 2020-02-16
  • 打赏
  • 举报
回复
*str为什么是‘1’,自己找本最基础的入门书来看,然后弄清楚str++后,*str又是什么 num *= 10,相当于 num = num * 10 上面说了while第一次循环结束后,num=1,while第二次循环 *str为‘7’ num *= 10 //num = num * 10 = 1 * 10 = 10 num += *str - ‘0’ // num = num + (*str -‘0’) = 10 + (‘7’ - ‘0’) = 10 + 7 = 17 所以第二次循环结束num变为17 依次类推,最后num变为1701,所以最后输出结果就是1701 补充一点,*=,+=这样的运算符会隐式转换为=左边的类型,所以一般能转换成功就不会出错
  • 打赏
  • 举报
回复
首先num是一个int 整型, 第五行翻译一下就是这样 num = num + 字符1 - '0' 不同类型不能相加,当然会报错
qybao 2020-02-15
  • 打赏
  • 举报
回复
看代码好像没问题啊 num += *str - ‘0’ 相当于 num = num + (*str - ‘0’) fun就相当于把字符串转成int 比如str = “1701” num 初始值为 0 while第一次进入循环 num *= 10 //num = 0 num += *str - ‘0’ // *str是‘1’,所以*str - ‘0’ = 1,num += 1,num=1,所以就相当于把str的第一个字符‘1’转成了1,其余依次类推
安卓开发菜鸟 2020-02-15
  • 打赏
  • 举报
回复
引用 楼主 weixin_45836202的回复:
这个应该是字符串指针的函数吧,但我看不懂这串代码,特别是第五行那里num+=…的那一行,不知道是什么意思,求大佬细细讲解一下。我用了VS2018编译了一下,但是就算是复制黏贴,编译器都说我代码有误运行不了,求大佬指点明津
大佬们求解谢谢了
安卓开发菜鸟 2020-02-15
  • 打赏
  • 举报
回复
引用 楼主 weixin_45836202的回复:
这个应该是字符串指针的函数吧,但我看不懂这串代码,特别是第五行那里num+=…的那一行,不知道是什么意思,求大佬细细讲解一下。我用了VS2018编译了一下,但是就算是复制黏贴,编译器都说我代码有误运行不了,求大佬指点明津
代码在这里,忘记上传图片了 int fun(char *str) { int num=0; while(*str) { num*=10; num+=*str-'0'; str++; } return num; } int main(){ char *chr="1701"; cout<<fun(chr); return 0; } 该程序段的输出结果是:

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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