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

如何用scanf输入字符串并输出回文子串总数?C语言代码报错求助

问题分析与代码修正

原代码核心错误

  • countSubstrings函数声明为int类型,但未返回计算结果,缺少return res;语句。
  • main函数中未定义字符串变量s就直接调用strlen(s),属于未定义行为。
  • main函数逻辑偏离需求:需要输入字符串,却用%i读取整数长度。
  • main函数未调用countSubstrings函数执行统计,导致输出的res始终为初始值0。

修正后的代码

#include <stdio.h>
#include <string.h>

int countSubstrings(char *s)
{
    int res = 0;
    int left = 0;
    int right = 0;
    int len = strlen(s);
    for (int i = 0; i < len; i++) {
        // 统计奇数长度回文子串
        left = i;
        right = i;
        while (left >= 0 && right < len && s[left] == s[right]) {
            res++;
            left--;
            right++;
        }
        // 统计偶数长度回文子串
        left = i;
        right = i + 1;
        while (left >= 0 && right < len && s[left] == s[right]) {
            res++;
            left--;
            right++;
        }
    }
    return res;
}

int main()
{
    char s[1000]; // 定义字符数组存储输入字符串,可按需调整大小
    scanf("%s", s); // 读取输入的字符串
    int res = countSubstrings(s); // 调用统计函数
    printf("%d\n", res); // 输出统计结果
    return 0;
}

修正说明

  1. 给countSubstrings函数添加返回语句,确保统计结果能传递到主函数。
  2. main函数中定义字符数组存储输入字符串,使用%s格式符读取用户输入。
  3. 调用统计函数获取回文子串总数后输出,符合需求逻辑。
  4. 保留原代码中中心扩展法的核心统计逻辑,该逻辑能覆盖奇数、偶数长度的所有回文子串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:26