VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 243|回复: 4

[已解决]新手学习C++,看视频中有个小练习求解答!

[复制链接]
92_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-31 21:13:10 | 显示全部楼层 |阅读模式
任意输入字符串,如下:
                a123x456__17960 ? 302ab5876
                将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数。

看视频中的小练习,查了百度还是不太懂,希望大佬能解答下。新手学习C++,看视频中有个小练习求解答!
最佳答案
51_avatar_small
2020-1-31 23:08:21
其他很多网友已经给出答案了:
https://www.cctry.com/thread-298725-1-1.html
可以参考下!




上一篇:VS2019关于C2143的错误如何处理
下一篇:getpeername 得到的是什么?
51_avatar_middle
最佳答案
82 
online_admins 发表于 2020-1-31 23:08:21 | 显示全部楼层    本楼为最佳答案   
bestAnswer
其他很多网友已经给出答案了:
https://www.cctry.com/thread-298725-1-1.html
可以参考下!
95_avatar_middle
最佳答案
0 
在线会员 发表于 2020-2-1 03:28:18 | 显示全部楼层
本帖最后由 Vourui 于 2020-2-1 03:29 编辑

//里面还写了不少我碎碎念的批话,请忽略


#include "pch.h"

//输入一个字符串,例如:
//a123x456__17960 ? 302ab5876
//将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数。

int main()
{
        //string str = "a123x456__17960 ? 302ab5876";
        char str[] = "a123x456__17960 ? 302ab5876";
        char* lp_num = str;
       
        int str_len = strlen(str);

        int i = 0,j = 0;//循环变量
        int num = 0;  //计数,累计出现数字的次数
        int no_num = 0;//计数,累计出现非数字的次数
        int count = 0;//计数器,累计出现连续数字的次数
        char a[30] = { 0 };//暂时放置数字
        int b[6] = { 0 };//放置数字字符串,注意这个数组大小需要比原数组最大连续数字的个数要大!
        int c = 0;//冗余,为了显示清晰,c表示10的幂指数
        int d = -1;//a[]数组下标

        char* lpa = &a[0];//指针,用以获取不同a下标下a的值
        int e = 0;


        for (i=0; i <= str_len; i++)
        {
                if (*(lp_num) >= '0'&&*(lp_num) <= '9')
                {
                        a[num] = *(lp_num);
                        num++;
                }

                else
                {
                        no_num++;
                        //判断num>0,如果true开始将获取的数字组合成
                        if (num > 0)
                        {
                                count++;
                                for (j = num; (j - 1) >= 0; j--)
                                {
                                        d++;
                                        int c = pow(10, j - 1);
                                        //换种方法写,用指针写(int)a[d]
                                        lpa = &a[d];
                                        e = *(lpa);
                                        b[count - 1] = b[count - 1] + ((e-48) * c);//找到原因了:1.强制类型转换将char转化为int时实际转化为字符对应的ASCII码 —— a[0] == 49'1'  ->  (int)a[0] ==49
                                                                                                                                                                                     //2. ^ 是按位异或符号  幂函数是pow(double x,double y) 计算x的y次,需要包含cmath
                                                                                                                     //3.a[] 与后面的幂指数是顺序相反的两组数—— a[j]= a[0 -> 1 -> 2]      num=2 -> 1 -> 0 这个怎么表示?       
                                }
                                d = -1;//完成一组数字后d置-1,否则d叠加,幂指数不正常
                                cout << "第" << count << "组数字是:" << b[count-1] << endl;
                                num = 0;//完成组合后num需要置零
                        }
                        else
                        {
                                cout << *(lp_num) << "不是数字" << endl;
                        }
                }

                *(lp_num++);
        }

        return 0;
}
92_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-1 19:06:44 | 显示全部楼层
Syc 发表于 2020-1-31 23:08
其他很多网友已经给出答案了:
https://www.cctry.com/thread-298725-1-1.html
可以参考下!

谢谢大佬!!!
92_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-1 19:07:50 | 显示全部楼层
Vourui 发表于 2020-2-1 03:28
//里面还写了不少我碎碎念的批话,请忽略

感谢,有了这些注释理解的清楚了很多!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-30 11:19

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表