【C基础练习】统计含有数字和非数int字符的字符串中的连续数字个数并作为整数存放在数组中输出

题目:输入一个字符串,内有数字和非数int字符,如a123x456,将其中连续的数作为一个整数,依次存放到整形数组a中。

例:123存放在a[0],456存放在a[1]。统计共有多少整数,并输出这些整数

首先分析题目,基本要素有: 含有数字和非数字符的字符串整数存放整数的整形数组
需要操作的部分或得到的东西为:得到字符串中的 连续数字(连续是个问题,个人理解单个数字不考虑了), 整数的个数(这里很好统计,额外定义一个int变量计数,或者和a下标共用计数,比较最终下标计数+1就是整数个数), 输出整数(很简单的整形数组循环输出);
下面分析一下代码,思路和结果不唯一,仅代表一种个人思考角度:
#include<stdio.h>

int main(int argc, char const *argv[])
{
    int a[10];          //定义一个整形数组来存得到的整数
    char *p=NULL;       //用指针遍历字符数组更方便,记得初始化,警惕野指针
    printf("请输入一段带数字的字符串:");
    char s[20];         //定义字符数组
    scanf("%[^\n]",s);  //终端输入字符串,采用消除垃圾字符的输入方式
    p=s;//让指针指向字符数组首地址
    int sum=0,i=0;      //定义整数合成器sum和a下标i,并利用i计数

    while(*p!='\0')     //采用while循环作为遍历驱动
    {
        if(*p<='9'&&*p>='0')                      //判断指针是不是数字
            {
                if(*(p+1)>='0'&&*(p+1)<='9')      //判断数字是否连续并且不移动指针
                    {
                        while(*p<='9'&&*p>='0')   //对当前连续的数字部分遍历
                        {
                        sum=sum*10+*p-48;         //利用ASCII让单独的数字字符成为有意义的整数,数字字符-48=整形数字,sum=sum*10这步就是让数字升位,循环后得到的sum就是转换完成的整数               
                        p++;                      //让p指向下一个数字推进遍历
                        }                         //当p指向的非数字时获得1个整数sum
                        a[i]=sum;                 //将当前整数存储进数组中
                        sum=0;                    //清空sum以获得接下来的整数
                        i++;                      //从a[0]开始存,a[i]在变化
                    }
                
            }
        
        p++;                        //当前非数字时指针后移继续下面的判断
    }
    printf("共有%d个整数:",i);      //这里i本来是表示下标,理论上最大下标+1才是元素个数,但因为循环结束前i又自加了一次,所以现在的i就是元数个数。
    for(int j=0;j<i;j++)           
        printf("%d ",a[j]);        //循环输出数组a内容
    printf("\n");

    return 0;                      //结束程序
}

测试结果:

 

这是我参加的c基础培训day13的练习题,题目不难,顺着思路写一遍就能跑,但是也明显感觉到自己有初学者的不好习惯和错误,望大佬和同僚指正,互相学习,共勉!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夢靈子DMC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值