INPUT 1 + 2-3 + 4 OUTPUT = 4
INPUT 1 + 2 + 3 + 4 OUTPUT = 10
输入-1-2-3-4 OUTPUT = -10
这是我的尝试,但我给出了错误的结果
代码片段:
for(i=0;i<strlen(res)+1;i++){
if(res[i]=='-'||res[i]=='+'||res[i]=='\0'){
num[z]='\0';
dig=atoi(num);
if(x==0){
sum=dig;
x++;
}
else{
if(res[i]=='+')
sum=sum+dig;
else if(res[i]=='-')
sum=sum-dig;
}
z=0;
}
else{
num[z]=res[i];
z++;
}
return sum;
答案 0 :(得分:0)
我会在代码中添加print语句,以查看它出错的地方。但是,当你到达终止空(res[i]=='\0'
)时,看起来就像你没有将最终数字添加到sum
。
我正在假设num,x和z的声明和初始化程序,并且缺少}
是缩进所暗示的地方。
答案 1 :(得分:0)
此行引用数组“num”,但不是正确的索引:
dig=atoi(num);
如果您将其更改为:
,则应该修复 dig=atoi(num[z-1]);
但是,对于数字超过一位数的计算,您的解决方案不起作用。
答案 2 :(得分:0)
但是,当你到达终止空(
res[i]=='\0'
)时,看起来就像你没有将最终数字添加到sum
。
这是真的,但不是唯一的错误;如果遇到+
或-
,则使用先前而不是下一个数字完成相应的加法或减法。因此,输入1+2-3+4
实际上会计算1-2+3
,其中2
您可以使用strtol
简化整个循环的编码:
char *beg, *end = res;
for (sum = 0; dig = strtol(beg = end, &end, 0), end-beg; ) sum += dig;