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;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[1001][1001]` 用于存储每个单词,但 `b[count1][count2] = a[i]` 会把空格也存入单词中,导致单词包含多余空格。
- 第二个循环中 `b[count1][j]` 使用了 `count1` 作为行索引,但 `count1` 是单词总数减1,这里应该遍历每个单词的行索引 `i`。
- 变量 `k` 在每次内层循环后重置为0,但内层循环条件 `b[count1][j] != '\0'` 可能无法正确找到单词结尾,因为单词没有以空字符结束。

提示:
- 检查存储单词时是否应该跳过空格字符,以及如何正确标记每个单词的结束位置。
- 第二个循环中,检查每个单词的首尾字符时,需要确保访问的是正确的行和正确的最后一个字符位置。