指针练习

//输入一个字符串,内有数字和非数字字符,如a123X456  17960? 302tab5876 将其中连续的数字作为一个整数,
//一次存放到整数型数组a中,例如123放到 a[0],456放到 a[1]中,统计有多少个整数,并输出这些数;

#include <stdio.h>
#include <string.h>

void main()
{
  char b[100];  
    int  a[100];  
    memset(a,'\0',100);  
    char *p = b;  
    int i = 0;  
    int j;  
    int sum = 0;  
    int count = 0;  
    int flag = 1;//标志位,遇到数字为0,遇到非数字为1;此处其初始值为1,默认首字符前面还是非数字,不输出整数,主要配合下面的程序  
    printf("请输入字符串:\n");  
    gets(b);  
      
    while(*p )  
    {  
        if(*p <= '9' && *p >= '0')  
        {  
            flag = 0;//遇到数字,flag=0  
            sum = sum*10 + *p++ - '0';//将字符数字转化成整数,此时并不输出。当下一个字符为非数字时,才输出  
        }     
        else   
        {  
            while(flag == 0)//此时读到非数字字符,判断此时flag,如果此时flag为0.说明上一个字符为数字  
            {  
                a[i++] = sum ;//此时将数字输出,赋给a[i],i++  
                sum = 0;//将sum清零  
                flag = 1;//非数字字符,flag置1  
            }  
            p++;//此时flag为1,没有整数输出,则看下一个字符  
        }  
    }  
//字符串结束后,会遇到两种情况,一个是最后一个字符为数字,另一种是非数字字符  
    if(flag == 0)//因为前面的程序中,整数的下一个字符为非数字时,才会输出整数,若最后一个是数字的话,则无法输出,所以这里对最后一个字符进行判断  
        a[i] = sum;//将最后一个整数输出  
    else   
        i--;//此时最后一个字符为非数字,没有整数输出,但i多加了一次,所以此处i--  
      
    count = i + 1;//整数个数为i+1  
    printf("共有%d个整数\n",count);  
    printf("这些整数是:\na[]=");  
    for(j = 0; j < i+1; j++)  
        printf("%d ",a[j]);  
    printf("\n");  

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值