VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 506|回复: 9

各位大佬帮帮忙,求助!

[复制链接]
52_avatar_middle
最佳答案
0 
在线会员 发表于 2021-2-2 09:23:33 | 显示全部楼层 |阅读模式
任意一串字符串{ "as65d4sa6d556sad6d16s5a165sf4fsdaf544" },将其中连续的数字取出并组合成新的数,放入一个新的数组中,如 将65这个数放入a[0]中


#include<iostream>
using namespace std;
int main()
{
        char g[100] = { "as65d4sa6d556sad6d16s5a165sf4fsdaf544" };
        char *p;
        p = g;
        int sum=0, i=0,a[100],j;
        for (; *p != '\0';p++,i++)
        {
                sum = 0;
                for (; *p >= 48 && *p <= 57; p++)
                {
                        sum = sum * 10 + *p;
                        a[i] = sum;
                }
        }
        for (j = 0; j <= i;j++)
        printf("%-4d\n", a[j]);
        return 0;
}
我输出失败了




上一篇:求助,看下哪里错了,list是单链表,主函数没问题,函数目的是将重复的元素建立新l...
下一篇:MFC调用DataGridView问题
31_avatar_middle
最佳答案
14 
在线会员 发表于 2021-2-2 11:24:08 | 显示全部楼层
本帖最后由 cpp2019 于 2021-2-2 11:55 编辑

这个还是用正则比较好
31_avatar_middle
最佳答案
14 
在线会员 发表于 2021-2-2 15:04:49 | 显示全部楼层
不知道是不是你想要的效果
  1. #include<iostream>
  2. #include <regex>
  3. using namespace std;

  4. int main()
  5. {
  6.         char g[100] = { "as65d4sa6d556sad6d16s5a165sf4fsdaf544" };
  7.         int a[100] = { 0 };
  8.         int i = 0;
  9.         int tmp1 = 0, tmp2 = 0;
  10.         char *p = g;
  11.         while (*p != '\0')
  12.         {
  13.                 if (*p >= 48 && *p <= 57 &&  0 == i)
  14.                 {
  15.                         i++;
  16.                         tmp1 = *p;
  17.                 }
  18.                 else if (*p >= 48 && *p <= 57 && 1 == i)
  19.                 {
  20.                         tmp2 = *p;
  21.                         printf("%c%c\n", tmp1, tmp2);//tmp1 tmp2 组合成一个数存进数组自己写吧
  22.                         i = 0;
  23.                         tmp1 = 0;
  24.                         tmp2 = 0;
  25.                 }
  26.                 else if(1 == i)
  27.                 {
  28.                         i = 0;
  29.                         tmp1 = 0;
  30.                         tmp2 = 0;
  31.                 }
  32.                 p++;
  33.         }

  34.         cout << "----正则实现----" << endl;
  35.         string str = g;
  36.         regex reg("\\d{2}");
  37.         sregex_iterator it(str.cbegin(), str.cend(), reg);
  38.         sregex_iterator end;
  39.         for (; it != end; ++it)
  40.         {
  41.                 cout << it->str() << endl;
  42.         }
  43.         return 0;
  44. }
复制代码

各位大佬帮帮忙,求助!
57_avatar_middle
最佳答案
22 
在线会员 发表于 2021-2-2 17:44:55 | 显示全部楼层
增加了一些处理
  1. #include<iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         char g[100] = { "as65d4sa6d556sad6d16s5a165sf4fsdaf544" };
  6.         char *p;
  7.         p = g;

  8.         int i = 0;
  9.         int sum = 0;
  10.         int a[100] = { 0 };
  11.         for (; *p != '\0'; p++)
  12.         {
  13.                 if (*p >= 48 && *p <= 57)
  14.                 {
  15.                         sum = 0;
  16.                         for (; *p >= 48 && *p <= 57; p++)
  17.                         {
  18.                                 sum = sum * 10 + *p - '0';
  19.                                 a[i] = sum;
  20.                         }

  21.                         i++;
  22.                 }
  23.                
  24.         }

  25.         for (int j = 0; j < i; j++)
  26.                 printf("%-4d\n", a[j]);

  27.         return 0;
  28. }
复制代码

微信截图_20210202174423.png
52_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-2-3 14:30:43 | 显示全部楼层
JLDawson 发表于 2021-2-2 17:44
增加了一些处理

谢谢,请问其中的    -'0'    有什么作用,我没有加就输出不了
83_avatar_middle
最佳答案
1 
在线会员 发表于 2021-2-3 15:42:10 | 显示全部楼层
helloh 发表于 2021-2-3 14:30
谢谢,请问其中的    -'0'    有什么作用,我没有加就输出不了

*p的值是字符的ansi,要减去字符'0'的ansi才得到真正的int数值
31_avatar_middle
最佳答案
14 
在线会员 发表于 2021-2-3 20:19:32 | 显示全部楼层
75_avatar_middle
最佳答案
0 
在线会员 发表于 2021-2-4 22:41:02 | 显示全部楼层
C:\Users\21192\Desktop\QQ截图20210204223843.jpg

*p 是ASCLL码 要减掉0的ASCLL才能直接参与计算
57_avatar_middle
最佳答案
22 
在线会员 发表于 2021-2-5 16:31:53 | 显示全部楼层
helloh 发表于 2021-2-3 14:30
谢谢,请问其中的    -'0'    有什么作用,我没有加就输出不了

sum = sum * 10 + *p - '0';
该句代码中,*p是char类型的数字,需转换为int类型。
可以去了解一下ASCII。你没加不是说不能输出,而是输出的数据是char类型数据计算后的结果。
73_avatar_middle
最佳答案
0 
在线会员 发表于 2021-2-8 17:57:40 | 显示全部楼层
*p是字符串你这大于48小于57是干啥的
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2021-5-18 15:13

Powered by CcTry.CoM

© 2009-2021 cctry.com

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