C语言回文识别程序调用void类型isalphabet函数编译失败如何解决?
C语言回文判定程序修复方案
问题梳理
- 缺少必要头文件:
strcmp、strlen依赖<string.h>,isalpha依赖<ctype.h>,未引入会直接导致编译报错 isalphabet函数未提前声明,主函数调用时编译器无法识别函数原型isalphabet调用方式错误:该函数需要传入原始输入字符串、存储过滤结果的空字符串两个参数,原有inputstring(isalphabet)的调用逻辑完全错误isalphabet内部的字符串结束符\0赋值放在了for循环体内,每次循环都会覆盖结束符,会导致过滤结果异常- 输入用
scanf("%s")只能读取到空格前的内容,无法处理带空格的输入场景 - 现有回文判定大小写敏感,可按需调整为大小写不敏感,适配更多场景
修复后完整代码
#include <stdio.h> #include <string.h> #include <ctype.h> // 提前声明所有自定义函数 int isPalindrome(char inputString[]); void isalphabet(char inputString[], char nystring[]); int main() { char inputString[100]; char filteredString[100]; int ret; // 用fgets读取带空格的完整输入 fgets(inputString, sizeof(inputString), stdin); // 去除fgets读取到的末尾换行符 inputString[strcspn(inputString, "\n")] = '\0'; // 调用过滤函数,仅保留字母 isalphabet(inputString, filteredString); // 传入过滤后的字符串做回文判定 ret = isPalindrome(filteredString); printf("回文判定结果:%d", ret); return 0; } int isPalindrome(char inputString[]) { int count = 0; int result; while (inputString[count] != '\0') { count++; } char stcp[100]; int i = count, j = 0; while (i != 0) // 若需要大小写不敏感的判定,可改为 stcp[j++] = tolower(inputString[--i]); stcp[j++] = inputString[--i]; stcp[j] = 0; if (strcmp(inputString, stcp) == 0) { result = 1; } else { result = 0; } return result; } void isalphabet(char inputString[], char nystring[]) { int count, i, ny_i = 0; count = strlen(inputString); for (i = 0; i < count; i++) { if (isalpha(inputString[i]) != 0) { // 若需要大小写不敏感的判定,可改为 nystring[ny_i] = tolower(inputString[i]); nystring[ny_i] = inputString[i]; ny_i++; } } // 字符串结束符移到循环结束后赋值 nystring[ny_i] = '\0'; }
内容的提问来源于stack exchange,提问作者notmenotyou
相关产品推荐
相关产品推荐

