统计共有多少个整数,输出这些数;

输入一个字符串,内有数字和非数字字符,例如

A123x456 1789?302TAB5876

将其中连续的数字作为一个整数,依次存放到一数组a中,如123放在a[0],456放在a[1]中;

#include<stdio.h>
int main()
{
 int i,j,k,digit,ndigit,e10,m,a[10],*pa;
 char str[50],*pstr;
    printf("please input string:/n");
 gets(str);

 pa=&a[0];
 pstr=&str[0];
 ndigit=0;
 i=0;
 j=0;
 while(*(pstr+i)!='/0')
 {   //忘记写=等于号了,应该是">="
  if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))//刚开始以为要用while;其实用if效果一样;注意相与的时候要加括号
   j++;
  else//注意else作用域是下面这个花括号;不包括i++;
  {
   if(j>0)
   {   //将个位数赋予digit;
    digit=*(pstr+i-1)-48;//0~9的ascii码是30h~39h;减去48将它变为十进制;
    k=1;//k个位数
    while(k<j)
    {
     e10=1;//该位数所应乘的因子;
     for(m=1;m<=k;m++)//k如果大于2;计算e10的因子;
      e10=e10*10;
     digit=digit+(*(pstr+i-1-k)-48)*e10;//将十位百位数的数字乘以e10;
     k++;//数位k自增;
    }
    *pa=digit;//将数值赋予数组a;
    ndigit++;
    pa++;//指针pa指向a数组下一元素;
    j=0;//一个数结束;初始j=0;
   }
  }
   i++;
 }
   printf("this string total have %d digit/n",ndigit);
   pa=&a[0];//如果没有重新赋值pa指向a首地址;输出值就不正确;因为pa值变化了,所以需要重新赋值;
   for(j=0;j<ndigit;j++)//总共有ndigit个数字个数;所以j<ndigit;
    printf("%8d",*(pa+j));//如果%4d因为不够宽,输出的两个数字连在一起了;
   printf("/n");
   return 0;
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值