在线编译器 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[1]=' '){ 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; }
这段代码的目的是统计字符串中每个单词的首尾字母(忽略大小写)相同的单词个数。但代码有几个问题。

- 第8行 `gets(s)` 是不安全的,应该用 `fgets`,但这不是主要逻辑错误。
- 第10行 `if (s[1]=' ')` 这里有两个错误:一是 `s[1]` 应该是 `s[i]`,二是 `=` 是赋值而不是比较,应该用 `==`。这导致循环逻辑完全混乱。
- 变量 `a` 在遇到空格时被跳过,但 `a` 的值可能来自上一个单词的首字母,而不是当前单词的首字母。你需要确保在每次遇到新单词时重新获取首字母。
- 内层 `while` 循环结束后,`b` 取的是 `s[i-1]`,但此时 `i` 可能已经指向空格或字符串末尾,需要确认 `b` 是否正确对应单词的最后一个字母。

- 检查 `if (s[1]=' ')` 这一行,思考如何正确判断当前字符是否为空格,以及如何正确获取每个单词的第一个字母。
- 考虑在进入内层循环之前,如何保存当前单词的首字母,并且确保这个首字母不是空格。