Online Compiler 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; } b[count1][count2] =a[i]; count2++; } for(int i = 0; i < count1 + 1;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] = '\0'`,这实际上是在修改数组内容,而不是判断结束符。

- 检查存储单词的逻辑:当遇到空格时,应该跳过空格,不要将空格存入单词数组。同时,每个单词结束后要添加字符串结束符 `\0`。
- 检查内层循环的条件:`b[count1][j] = '\0'` 是赋值操作,应该改为判断是否等于 `\0`,即 `b[i][j] == '\0'`。另外,这里使用了 `count1` 而不是 `i`,可能也是笔误。