c语言程序需要帮忙调试 详细点开看?
#include<string.h>
#include<math.h>
main()
{ char a[500],b[500];
int d[100]={0};
int s,i,j,n,m,p=0,v,h,c;
gets(a);
s=strlen(a);
for(i=0;i<s;i++)
{ if(a[i]>='0' && a[i]<='9')
{ b[v]=a[i];
v++;
for(j=i+1;j<s-i;j++)
{if(a[j]>='0' && a[j]<='9')
{b[v]=a[j];
v++;
}
else
{v++;
break;
}
}
b[v]=0;
n=0;m=0;
c=strlen(b);
for(v=0;v<c;v++)
{m+=(b[v]-'0')*pow(10,c-n);
n++;
}
for(v=0;v<c;v++)
b[v]={0};
d[p]=m;
p++;
}
}
for(p=0;p<100;p++)
h+=d[p];
printf("%d",h);
} 题目是编写程序实现从一字符串str中取出连续的数字作为一个正整数,计算所有这些正整数之和。 展开
原来的代码用了太多变量弄得稍复杂,简化一下,不知是否符合要求:
#include<stdio.h>
void main()
{
char a[500];
char* s;
int d[100] = { 0 };
int i = 0, sum = 0;
gets(a);
s = a; //指针指向字符串起始位置
while (*s) //当*s不为0,即字符串未结束
{
while (((*s) < '0') || ((*s) > '9')) //跳过所有非数字
{
if (*s) //如果没碰到字符串结束符0,向后移动指针s
s++;
else
break; //碰到字符串结束符0,则结束循环
}
while (((*s) >= '0') && ((*s) <= '9')) //当碰到数字,则存储到d[i]中,连续数字则不断d[i]*10累加
{
d[i] = d[i] * 10 + (*s)-'0';
s++; //每处理完1位数字,指针后移1位
}
i++; //每处理完1组连续数字,d数组索引加1,准备存储下一组数字
}
for (i = 0; i < 100; i++)
sum += d[i];
printf("%d", sum);
}
#include<string.h>
#include<math.h>
main()
{
char a[500],b[500];
int d[100]={0};
int s,i,j,n,m,p=0,v=0,h=0,c;//v,h初始化为0
gets(a);
s=strlen(a);
for(i=0;i<s;i++)
{
if(a[i]>='0' && a[i]<='9')
{
b[v]=a[i];
v++;
for(j=i+1;j<s;j++)
{
if(a[j]>='0' && a[j]<='9')
{
b[v]=a[j];
v++;
}
else
{
// v++;
break;
}
}
i = j;//从j+1处开始继续
b[v]=0;
n=0;m=0;
c=strlen(b);
for(v=0;v<c;v++)
{
m+=((b[v]-'0')*(int)pow(10,c-n-1));//减1
n++;
}
for(v=0;v<c;v++)
b[v]=0;
d[p]=m;
p++;
v = 0;//重新初始化为0
}
}
for(p=0;p<100;p++)
h+=d[p];
printf("%d",h);
}
很简单的问题被你复杂化了,我可以用不到你一半的代码完成同样的任务,但为了不打乱你的思路,按你的程序改了一下就可以了,你很容易看明白,楼下的方法也很不错,你可以参考一下
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[500] = {0};
char arr[500] = {0};
int buf[100] = {0};
gets(str);
int i=0;
int j = 0;
int n = 0;
int sum = 0;
int q = 0;
while(str[i] != '\0')
{
if(str[i] >= '0' && str[i] <= '9')
{
n = i;
while(str[n] != '\0')
{
arr[j] = str[n];
printf("////\n");
if(str[n+1] > '9')
{
if(str[n+1] == '\0')
{
break;
}
i = n;
break;
}
n++;
j++;
}
printf("%s ",arr);
printf("\n");
buf[q] = atoi(arr);
q++;
memset(arr,0,500);
j = 0;
i = n;
}
i= i+1;;
}
for(i = 0;i<q;i++)
{
printf("%d ",buf[i]);
}
for(i = 0;i<q;i++)
{
sum+= buf[i];
}
printf("\n");
printf("sum = %d\n",sum);
return 0;
}