C语言如何实现字符串中回文单词的识别与提取功能?
C语言提取字符串中所有回文单词实现方案
核心需求
检测输入字符串中包含的所有回文单词并输出,单词默认以空格分隔。示例:输入字符串为awbiue abdba aebto leoel时,输出结果为abdba leoel。
原有代码问题梳理
你之前编写的代码存在两个核心问题:
- 仅对输入的完整字符串做回文判断,没有按空格拆分出单个单词的逻辑
- 使用了已被C标准废弃的
gets()函数,存在缓冲区溢出安全风险
实现思路
- 用
strtok()函数按空格作为分隔符,将输入字符串拆分为单个单词 - 封装独立的回文判断函数,接收单个单词作为入参,返回是否为回文的判定结果
- 遍历所有拆分后的单词,对每个单词调用回文判断函数,符合要求就直接输出
完整可运行代码
#include <stdio.h> #include <string.h> #include <ctype.h> // 回文判断函数,是回文返回1,否则返回0 int isPalindrome(char *word) { int len = strlen(word); for (int i = 0; i < len / 2; i++) { // 若不需要忽略大小写判断,可去掉tolower()函数 if (tolower(word[i]) != tolower(word[len - i - 1])) { return 0; } } return 1; } int main() { char str[1024]; // 扩大缓冲区避免输入过长溢出 printf("Enter string: "); fgets(str, sizeof(str), stdin); // 替换gets为安全的fgets // 去除fgets读取到的末尾换行符 str[strcspn(str, "\n")] = '\0'; // 按空格拆分单词 char *word = strtok(str, " "); printf("识别到的回文单词:"); while (word != NULL) { if (isPalindrome(word)) { printf("%s ", word); } word = strtok(NULL, " "); } printf("\n"); return 0; }
运行测试
输入:awbiue abdba aebto leoel
输出:识别到的回文单词:abdba leoel
内容的提问来源于stack exchange,提问作者Artiom J
相关产品推荐
相关产品推荐

