在线编译器 C

#include <stdio.h> int main() { char a[1001], b[1001][1001]; fgets(a,sizeof(a),stdin); int count1 = 0, count2 = 0, count3 = 0 ; for(int i = 0; a[i] != '\0';i++) { if(a[i] == ' ' ) { count1++; count2 = 0; } else { b[count1][count2] =a[i]; count2++; } } for(int i = 0; i < count1;i++) { int k = 0; for(int j = 0; b[count1][j] != '\0';j++) { k++; } if(b[i][0] == b[i][k]) { count3++; } } printf("%d", count3); return 0; }
这段代码试图从输入的一行字符串中,按空格分割出单词,然后统计首尾字符相同的单词数量。但代码中存在几个逻辑错误。

- 在第二个循环中,你使用 `b[count1][j]` 来获取最后一个单词的字符,但 `count1` 是空格的数量,而最后一个单词的索引应该是 `count1`(因为单词数比空格数多1)。同时,你在这里计算单词长度时,应该使用当前单词 `b[i]` 而不是 `b[count1]`。
- 计算单词长度时,你使用 `j` 循环直到遇到 `'\0'`,但 `b` 数组的每一行并没有被显式地添加字符串结束符,所以循环可能不会正确停止。你需要考虑如何正确标记每个单词的结束位置。

- 第一个循环中,当遇到空格时,你重置了 `count2`,但没有处理最后一个单词的结束符。这可能导致后续读取单词时出现问题。