在线编译器 C

#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { int count=0,i=0; char s[1001]; gets(s); int len = strlen(s); while (i<len) { if (s[i]==' '){ i++; continue; } char a=tolower (s[i]); while (i<len&&s[i]!=' ') { i++;} char b=tolower (s[i-1]); if(a==b){count++; } } printf("%d",count); return 0; }
这段代码试图统计字符串中每个单词首尾字母(忽略大小写)相同的单词数量。但存在几个问题。

- 代码使用了 `gets(s)`,这个函数不安全且已被废弃,应该用 `fgets` 替代。
- 缺少 `#include <string.h>` 来使用 `strlen`。
- 逻辑上,当遇到空格时,`i` 递增后 `continue`,但此时 `a` 和 `b` 可能还未定义或来自上一个单词,导致计数错误。

- 提示1:检查当遇到空格时,`a` 和 `b` 的赋值时机。空格处不应该进行单词首尾字母的比较,因为此时还没有完整的单词。
- 提示2:思考如何正确识别一个单词的开始和结束。可以在遇到非空格字符时记录单词首字母,然后跳过整个单词直到下一个空格,再取最后一个字母进行比较。注意处理字符串末尾没有空格的情况。