Online Compiler C

#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { int count=0,i=0; char s1[1001]; gets(s1); int len = strlen(s1); 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; }
这段代码试图统计字符串中每个单词首尾字母(忽略大小写)相同的单词数量。但代码中存在多个错误,导致无法正确运行。

- 第8行使用了 `gets(s1)`,但后面却用 `s[i]` 访问字符,变量名不一致。你定义的是 `s1`,但循环中用的是 `s`,这会导致编译错误或未定义行为。
- 第10行 `if (s[i]=' ')` 是赋值操作,不是比较。应该用 `==` 来比较字符是否等于空格。这个错误会导致条件永远为真,陷入死循环。
- 第13行 `char a=tolower (s[i]);` 中,`i` 此时指向空格,取的是空格的小写形式,而不是单词的首字母。你需要先跳过空格,然后记录单词第一个字母。
- 第15行的内层循环条件 `while (i<len&&s[i]!=' ')` 会一直走到单词末尾,但之后没有保存单词最后一个字母的位置,导致第16行 `s[i-1]` 可能取到空格或越界。