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

2016-06-19 22:15:28  分类: c程序设计第四版谭浩强课后答案  参与:

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

c程序设计第四版谭浩强课后答案
以下是此题的【c源代码】,需要【c++源代码】请点击进入

#include <stdio.h>
int main()
{
 char str[50],*pstr;
 int i,j,k,m,e10,digit,ndigit,a[10],*pa;
 printf("input a string:\n");
 gets(str);
 pstr=&str[0];    /*字符指针pstr置于数组str 首地址*/
 pa=&a[0];        /*指针pa置于a数组首地址*/
 ndigit=0;        /*ndigit代表有多少个整数*/
 i=0;             /*代表字符串中的第几个字符*/
 j=0;
 while(*(pstr+i)!='\0')
 {if((*(pstr+i)>='0') && (*(pstr+i)<='9'))
       j++;
     else
       {if (j>0)
        {digit=*(pstr+i-1)-48;          /*将个数位赋予digit*/
         k=1;
         while (k<j)     /*将含有两位以上数的其它位的数值累计于digit*/
           {e10=1;
         for (m=1;m<=k;m++)
         e10=e10*10;                  /*e10代表该位数所应乘的因子*/
         digit=digit+(*(pstr+i-1-k)-48)*e10;  /*将该位数的数值\累加于digit*/
         k++;                   /*位数K自增*/
           }
         *pa=digit;               /*将数值赋予数组a*/
         ndigit++;
         pa++;                    /*指针pa指向a数组下一元素*/
         j=0;
        }
    }
     i++;
    }
 if (j>0)                         /*以数字结尾字符串的最后一个数据*/
  {digit=*(pstr+i-1)-48;          /*将个数位赋予digit*/
   k=1;
   while (k<j)          /* 将含有两位以上数的其它位的数值累加于digit*/
    {e10=1;
     for (m=1;m<=k;m++)
       e10=e10*10;            /*e10代表位数所应乘的因子*/
     digit=digit+(*(pstr+i-1-k)-48)*e10;  /*将该位数的数值累加于digit*/
     k++;  /*位数K自增*/
    }
   *pa=digit;                 /*将数值赋予数组a*/
   ndigit++;
   j=0;
  }
  printf("There are %d numbers in this line, they are:\n",ndigit);
  j=0;
  pa=&a[0];
  for (j=0;j<ndigit;j++)            /*打印数据*/
    printf("%d ",*(pa+j));
  printf("\n");
  return 0;
}

来源:c程序设计第四版谭浩强课后答案

本文链接:http://www.wb98.com/c/post/tanhaoqiang_8.16.html

本站文章搜索:

<< 上一篇下一篇 >>

搜索

网站分类

Tags列表

赞助商链接