在线编译器 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 + 1;i++) { int k = 0; for(int j = 0; b[i][j] != '\0';j++) { k++; } if(b[i][0] == b[i][k]) { count3++; } } printf("%d", count3); return 0; }
这段代码试图统计输入字符串中,首尾字符相同的单词个数。它先将字符串按空格分割存入二维数组 `b`,然后检查每个单词的首尾字符是否相同。

代码中存在一个逻辑错误:在检查单词首尾字符时,`b[i][k]` 访问的是单词最后一个字符的下一个位置(因为 `k` 是单词长度,而数组索引从0开始),这会导致比较错误。

- 检查单词首尾字符时,应该比较 `b[i][0]` 和 `b[i][k-1]`,而不是 `b[i][k]`。
- 注意 `fgets` 会读取换行符,如果输入末尾有换行符,可能会被当作单词的一部分,影响分割结果。