牛骨文教育服务平台(让学习变的简单)
博文笔记

p279_10162 答案书版:在字符串有数字与非字符,找出连续的数字作为整数存放并统计个数

创建时间:2014-08-29 投稿人: 浏览次数:1053
输入一个字符串,内有数字和非数字字符,例如:"z123x456 17960?302tab5876" 将其中连续的数字作为一个整数,依次存放到数组a中,例如123存放在a[0],345存放在a[1]……统计其共有多少个整数,并输出这些数。
#include<stdio.h> #include<stdlib.h>

int main() {     charstr[50],*pstr;//在本章作者很喜欢用同含义不同名的变量指向同一数据。     inti,j,k,m,e10,digit,ndigit,a[10],*pa;     printf("input astring: ");    gets(str);//这个语句很容易出现溢出问题,字符串会被截断,即便是平时作业都不喜欢用它     pstr =&str[0];//字符指针pstr置于数组str首地址     pa =&a[0];//指针pa置于数组a的首地址     ndigit = 0;     i = 0;     j = 0;
   while(*(pstr+i)!="")//未到字符串结尾     {       if(*(pstr+i)>="0"&&*(pstr+i)<="9")            j++;   //是数字则记录        else        {            if(j>0)//j>0则是由数字字符,否则是连续的其他字符直接跳过即可            {               digit =*(pstr+i-1)-48;//从i-1位开始逆溯知道滴i-1-j个字符都是数字字符,先把各位赋值给digit               k = 1;               while(k               {                  e10 = 1;                  for(m = 1;m<=k;m++)                      e10 =e10*10;//e10表示该位所乘因子
                 digit = digit +(*(pstr+i-1-k)-48)*e10;//字符换算成数字
                 k++;               }//while               *pa = digit;               pa++;               ndigit++;               j = 0;           }//if
       }//if_else
       i++;//每次读取一个新字符     }//while
   if(j>0)//处理字符串以数字字符结尾的情况,每次出现同样代码时候就应该考虑算法是否合理。显然是可以修改的。可参照上一篇代码     {        digit = *(pstr+i-1)-48;        k = 1;        while(k        {            e10 =1;            for(m =1;m<=k;m++)               e10 =e10*10;//e10表示该位所乘因子
           digit =digit + (*(pstr+i-1-k)-48)*e10;//字符换算成数字
           k++;        }//while        *pa = digit;        ndigit++;        j = 0;     }//if
    printf("There are %dnumbers in this line.They are : ",ndigit);     j = 0;     pa = &a[0];     for(j = 0;j        printf("%d ",*(pa+j));     printf(" ");
    return 0; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。