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
相关产品推荐
相关产品推荐

