读书人

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

发布时间: 2012-04-26 14:01:31 作者: rapoo

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;} 

读书人网 >C++

热点推荐