首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++编程,求找错,该怎么处理

2012-04-26 
c++编程,求找错这是题目要求,写出来倒是没有error,就是存在逻辑错误,还请高手们帮帮忙吧编程实现输入一个

c++编程,求找错
这是题目要求,写出来倒是没有error,就是存在逻辑错误,还请高手们帮帮忙吧 
编程实现输入一个字符串,将其中连续的数字作为一个整数,依次存放到数组a中 例如:字符串为“ab123&gh6741kpen589”,
则将123存在a[0]中,6741存在a[1]中,589存在a[2]中。


#include<stdio.h>
#include<stdlib.h>
int fun(char *p,int *pa);
int main()
{
  char p[20];
  int a[20],d,i;
  gets(p);
  d=fun(p,a);
  for(i=0;i<d;i++)
  printf("%d",a[i]);
  system("pause");
  return 0;
}
int fun(char *p,int *pa)
{
  int i,j,k,e,n,m,d;
  i=0;j=0;d=0;
  while(*(p+i)!='\0')
  {
  if(*(p+i)>='0'&&*(p+i)<='9')
  j++;
  else
  {
  if(j>0)
  {
  n=*(p+i-1)-'0';
  k=1;
  while(k<j)
  {
  e=1;
  for(m=1;m<=k;m++)
  {
  e=e*10;
  n=n+(*(p+i-1-k)-'0')*e;
  k++;
  }
  }
  *pa=n;
  d++;
  pa++;
  j=0;
  }
  i++;
  }
  }
  return d;
}

[解决办法]
代码像海绵,里面总是有水分的。只要你肯用力去挤,多半就能让它更干一点。
那么,让我们想想,还有什么地方不对劲呢?嗯,处理过程中对所有的数字字符串我们都扫瞄了两遍,这又何必呢:

C/C++ code
#include<stdio.h>#include<stdlib.h>int fun(char *p,int *pa);int main(){    char p[200];    int a[20],d,i;    gets(p);    d=fun(p,a);    for(i=0;i<d;i++)        printf("%d\n",a[i]);    system("pause");    return 0;}int fun(char *p,int *pa){    int n=0,d=0;    int flag=1,noNumber=1;    while(flag)    {        flag=*p!='\0';        if(*p>='0'&&*p<='9')        {            noNumber=0;            //    维护这个标记来取代对数字字符的反复扫描            n=n*10+*p++-'0';    //    见到数字就直接转换,不等二次扫描了        }        else        {            if (!noNumber)        //    当前字符不是数字了,是刚发生的改变吗?            {                    //    是刚发生的                noNumber=1;        //    记录下这个改变,避免反复处理后续操作。                *pa++=n;        //    把前面的数字保存到数组中。                n=0;                ++d;            }            ++p;        }    }    return d;} 

热点排行