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; }
这段代码试图从输入中读取一行字符串,按空格分割成单词,然后检查每个单词的首尾字符是否相同,最后统计满足条件的单词个数。但代码中存在几个关键问题。

- 在第一个循环中,每次遇到空格时重置了 `count2`,但空格字符本身也被存入了 `b[count1][count2]`,这会导致单词中混入空格。同时,`count2` 在每次循环末尾都会自增,即使遇到空格后重置,也会在下一轮循环中继续增加,导致索引错乱。
- 第二个循环中,`b[count1][j]` 使用了 `count1` 作为行索引,但 `count1` 是单词总数减1,这里应该遍历每个单词的行索引 `i`。而且判断字符串结束的条件 `b[count1][j] == '\0'` 也不正确,因为单词末尾并没有存储空字符。
- 变量 `k` 试图计算单词长度,但循环条件错误,导致 `k` 的值不可靠。

- 检查第一个循环中存储单词的逻辑,确保每个单词的字符被正确存入二维数组的对应行,并且单词末尾要添加空字符 `'\0'`。
- 在第二个循环中,遍历每个单词时,使用正确的行索引 `i`,并正确计算每个单词的长度,然后比较首尾字符。