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

    技术2026-05-22  10

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

    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)