如何用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; }
修正说明
- 给
countSubstrings函数添加返回语句,确保统计结果能传递到主函数。 main函数中定义字符数组存储输入字符串,使用%s格式符读取用户输入。- 调用统计函数获取回文子串总数后输出,符合需求逻辑。
- 保留原代码中中心扩展法的核心统计逻辑,该逻辑能覆盖奇数、偶数长度的所有回文子串。
内容的提问来源于stack exchange,提问作者Shark Hiuu
相关产品推荐
相关产品推荐

