字符串运算符求和编程问题及错误代码修正请求
问题描述
给定仅包含+(加法)、*(乘法)的字符串S,下一行输入两个正整数a和b。计算每个运算符对应的运算结果之和,具体说明见示例。
输入格式
- 第一行:仅含
+、*的字符串S - 第二行:两个正整数a、b
约束条件
- 1 ≤ |S| ≤ 20(|S|表示字符串长度)
- 1 ≤ a,b ≤50
输出格式
输出基于字符串S的所有运算结果之和
示例
示例输入0
+* 5 10
示例输出0
65
解释0
当S[i]为+时,a+b=5+10=15,总和为15;当S[i]为*时,ab=510=50,总和为15+50=65
示例输入1
+***+ 2 1
示例输出1
12
用户提交的代码
#include<stdio.h> int main(){ char S[20]; int a,b,i,sum=0; scanf("%s %d %d",S, &a,&b); for(i=0; i<=20; i++){ if (S[i] == "+" ){ sum+=a+b; } else{ sum+=a*b; } } printf("%d",sum); return 0; }
修正后的代码
#include<stdio.h> #include<string.h> int main(){ char S[21]; int a, b, i, sum = 0; scanf("%s", S); scanf("%d %d", &a, &b); int len = strlen(S); for(i = 0; i < len; i++){ if (S[i] == '+'){ sum += a + b; } else if (S[i] == '*'){ sum += a * b; } } printf("%d", sum); return 0; }
错误修正说明
- 字符串容量问题:原代码定义
char S[20],但字符串最大长度为20,加上结束符'\0'需要至少21个存储位,改为char S[21]避免越界。 - 输入读取逻辑:原代码用单条
scanf读取所有输入,不符合题目“字符串和整数分两行输入”的格式,拆分两次读取更准确。 - 循环边界错误:原代码固定循环20次,会遍历到字符串结束符后的未知内存,改用
strlen(S)获取实际长度,仅遍历有效字符。 - 字符判断语法:单个字符判断需用单引号
'+',双引号"+"表示字符串常量,无法和字符类型匹配。 - 分支逻辑严谨性:原else分支直接默认乘法结果,改为明确判断
*,避免处理非预期字符时的错误计算。
内容的提问来源于stack exchange,提问作者ZABIA HOSSAIN
相关产品推荐
相关产品推荐

