You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串运算符求和编程问题及错误代码修正请求

问题描述

给定仅包含+(加法)、*(乘法)的字符串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;
}
错误修正说明
  1. 字符串容量问题:原代码定义char S[20],但字符串最大长度为20,加上结束符'\0'需要至少21个存储位,改为char S[21]避免越界。
  2. 输入读取逻辑:原代码用单条scanf读取所有输入,不符合题目“字符串和整数分两行输入”的格式,拆分两次读取更准确。
  3. 循环边界错误:原代码固定循环20次,会遍历到字符串结束符后的未知内存,改用strlen(S)获取实际长度,仅遍历有效字符。
  4. 字符判断语法:单个字符判断需用单引号'+',双引号"+"表示字符串常量,无法和字符类型匹配。
  5. 分支逻辑严谨性:原else分支直接默认乘法结果,改为明确判断*,避免处理非预期字符时的错误计算。

内容的提问来源于stack exchange,提问作者ZABIA HOSSAIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:45:29