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

如何修改C语言字符串处理代码以满足指定输入输出要求

代码修改说明

首先明确核心规则:遍历输入的整行字符串,统计不区分大小写的universe子串出现次数,根据次数输出对应内容:

  • 出现0次:输出Hello, World!
  • 出现n次(n≥1):输出Hello, Universe后拼接n个感叹号

原有代码问题及修改点

  • 1、输入读取逻辑错误:原有scanf("%s", str)只能读取到第一个空格前的内容,无法读取带空格的整行输入,修改为使用fgets(str, sizeof(str), stdin)读取整行,同时去除末尾自带的换行符。
  • 2、字符串匹配逻辑错误:原有strcmp是区分大小写且将整个输入串和universe直接比对,既不符合不区分大小写的要求,也无法统计多次出现的次数。改为遍历输入串,用不区分大小写的子串匹配逻辑统计universe的出现次数,可使用POSIX标准的strcasestr函数实现不区分大小写的子串查找。
  • 3、输出前缀字符串错误:原有str1的内容为Hello Universe,缺少要求的逗号,且分配的存储空间不足,拼接感叹号会触发数组越界,直接改为输出时按需拼接即可,无需提前定义固定字符串。
  • 4、计数逻辑完全错误:原有count初始化为0,后续for循环条件i < count永远不成立,属于逻辑死区。将count改为用于统计universe的出现次数,统计完成后再根据count值走输出分支。
  • 5、输出逻辑错误:原有逻辑只要单次匹配不成功就直接输出Hello world!,没有考虑次数统计的场景。修改为判断count == 0时输出Hello, World!,否则先输出前缀Hello, Universe,再循环输出count个感叹号即可。

修改后完整可运行代码

#include<stdio.h>
#include<string.h>
#include<strings.h> // 用于strcasestr函数

int main()
{
    char str[200];
    const char *target = "universe";
    int count = 0;
    char *pos;

    // 读取整行输入
    fgets(str, sizeof(str), stdin);
    // 去除fgets读取的末尾换行符
    str[strcspn(str, "\n")] = '\0';

    // 不区分大小写统计target出现次数
    pos = str;
    while ((pos = strcasestr(pos, target)) != NULL) {
        count++;
        pos += strlen(target); // 跳过当前匹配的内容,避免重复统计
    }

    if (count == 0) {
        printf("Hello, World!\n");
    } else {
        printf("Hello, Universe");
        for (int i = 0; i < count; i++) {
            printf("!");
        }
        printf("\n");
    }

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:06