void search(char *p1,double *p2,int *p3)
{
int i,j,k,h,n=0;
double sum=0;
int a[10];//定义一个数组存储每次检验得到的字符串中的整形数字
k=strlen(p1);//计算出输入的字符串的长度
for (i=0,j=0;i
if(*(p1+i)>='0' && *(p1+i)<='9')
{
a[j]=*(p1+i);
j++;//变量j用于记忆连续检测到的整数个数
}
/* //1. 修改
else if(i!=0)//当遇到字符串中的一个非整数的字符时,执行以下操作
{
for(h=0;h
*/
else if(j!=0)
{
for(h=j-1;h>=0;h--)
sum+=(a[j-h-1] - '0')*pow(10,double(h));//计算之前检测到的整数
*(p2+n)=sum;//将之前得到的这个数存入数组*(p2+n)即num[]数组
sum=0;//将sum归零,以便下一次检测到整数时再使用
n++;//n自加1以方便下次存储检测到的整数
j=0;//将j归零以方便下一次检测到整数时进行记忆
}
else continue;//如果字符串中的第一个字符就不是整数,
} //那么就直接跳出本次循环进行下一个字符的检测
// 2. 增加
if (j != 0)
{
for(h=j-1;h>=0;h--)
sum+=(a[j-h-1] - '0')*pow(10,double(h));//计算之前检测到的整数
*(p2+n)=sum;//将之前得到的这个数存入数组*(p2+n)即num[]数组
n++;
}
/*// 3. 修改
*(p3)=n+1;//记忆检测到的整数个数,“传回”主函数
*/
*(p3)=n;
}
对你的代码做了3处修改。分别说明如下:
1. 判断条件的修改,原条件无法判断两个数字中间的非字符数大于1的情况
循环变量h由递增改为递减,因为数组a中,下标从小到大分别表示的是从高位到低位,比如123保存在a中,那么a[0]保存的是百位
增加了一个乘法,因为pow只能计算该位置的单位,而不能表示具体数值,比如321,pow只能计算出100 + 10 + 1
为什么要减去'0',因为a中保存的是字符,而不是整数。
2. 增加了一次循环,如果字符串不是以非数字字符结尾,那么,最后一次读到数组a中的数据则无法u取出
3. 函数第三个参数的赋值修改为n而不是n+1,每次读完一个数字,n自动完成了加1,因此最后无需再对其进行加1操作