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

C语言程序开发需求:筛选并统计首尾字符相同的单词

解决C语言统计首尾字符相同单词的问题

先看你现有代码的几个明显问题:

  • gets()函数已被废弃,极易造成缓冲区溢出,建议用fgets()替代
  • Total变量未声明就使用,编译会直接报错
  • 你写的if(s[i]==s[i-1])是判断相邻字符相同,完全不是你要的单词首尾字符对比逻辑
  • 输出部分条件重复,导致打印内容混乱

下面是修正后的代码,能正确识别每个单词的首尾字符,统计符合条件的单词数量,还会输出这些单词:

#include <stdio.h>
#include <string.h>
#include <ctype.h> // 处理可能的空格开头/结尾

int main() {
    char s[50];
    printf("请输入句子:");
    // 用fgets替代gets,同时移除fgets读取的换行符
    fgets(s, sizeof(s), stdin);
    s[strcspn(s, "\n")] = '\0'; 

    int total = 0; // 统计符合条件的单词数
    int len = strlen(s);
    int i = 0;

    while (i < len) {
        // 跳过开头的空白字符,定位单词起始位置
        while (i < len && isspace(s[i])) {
            i++;
        }
        if (i >= len) break; // 到字符串末尾,退出循环

        int start = i; // 单词首字符索引
        // 找到单词结束位置(下一个空白字符或字符串末尾)
        while (i < len && !isspace(s[i])) {
            i++;
        }
        int end = i - 1; // 单词尾字符索引

        // 对比首尾字符,若要忽略大小写可改用tolower转换后对比
        if (s[start] == s[end]) {
            total++;
            // 输出该符合条件的单词
            printf("符合条件的单词:");
            for (int j = start; j <= end; j++) {
                printf("%c", s[j]);
            }
            printf("\n");
        }
    }

    printf("首尾字符相同的单词共有:%d个\n", total);
    return 0;
}

代码说明:

  • 用fgets()读取输入避免缓冲区溢出,同时用strcspn()去掉换行符(fgets会把回车也读入字符串)
  • 外层循环遍历整个字符串,内层循环先跳过空白字符找到单词开头,再定位到单词结尾
  • 拿到单词的首尾索引后直接对比字符,相同则计数加1并输出该单词
  • 用isspace()判断空白字符,比直接判断' '更严谨,能处理制表符等其他空白类型

如果需要忽略大小写(比如"AbbA"也算符合条件),可以把对比语句改成:

if (tolower(s[start]) == tolower(s[end])) {
    // 后续逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:05:43