在线编译器 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 - 1]) { count3++; } } printf("%d", count3); return 0; }
这段代码的功能是:从输入读取一行字符串,按空格分割成多个单词,然后统计首尾字母相同的单词个数,最后输出这个数量。

代码的主要思路是:
- 用二维字符数组 `b` 存储分割后的每个单词
- 用 `count1` 记录当前是第几个单词(从0开始)
- 用 `count2` 记录当前单词中的字符位置
- 遇到空格时,`count1` 增加,`count2` 重置为0,表示开始新单词
- 最后遍历每个单词,比较第一个字符和最后一个字符是否相同

需要注意的问题:

- 在判断单词首尾字母时,你使用 `b[i][k - 1]` 来获取最后一个字符。但 `k` 是通过遍历 `b[i][j] != '\0'` 得到的,这里有一个潜在问题:`b` 数组是局部变量,没有被初始化为全零,所以每个单词后面的字符可能不是 `'\0'`,导致 `k` 的值可能不正确。

- 另外,`fgets` 会读取换行符 `'\n'` 并存入字符串中,如果输入的最后没有空格,换行符可能会被当作单词的一部分,影响判断。