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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:24:04