Онлайн компилятор C

#include <stdio.h> int suma(char a[],int res[]) { int i = 0,count_save=0,count=0; while(a[i] != '\n' && a[i] != '\0') { if(a[i]==' '){ res[count_save++]=count; count=0; }else {count++;} i++; }res[count_save++]=count; return count_save; } int sum(char a[],int res[]) { int size=suma(a,res); if(a[0]==a[size-1]){ return 1; }return 0; } int main() { char a[1001]={"Anna went to kayak school"}; int res[1001]; int answer = 0; answer=sum(a); int all=0; all+=answer; printf("%d",all); return 0; }
这段代码试图统计句子中每个单词的长度,然后判断第一个单词和最后一个单词的长度是否相等。但代码中存在几个问题。

- 函数 `sum` 调用 `suma` 时,`suma` 返回的是单词个数,但 `sum` 中却用这个返回值作为数组下标去访问 `a[size-1]`,这实际上是在访问字符串中的字符,而不是单词长度数组中的值。你本意应该是比较第一个单词和最后一个单词的长度,但这里比较的是字符串的第一个字符和某个位置的字符。

- 在 `main` 函数中,`sum(a)` 只传了一个参数,但 `sum` 函数需要两个参数,这会导致编译错误。你需要把 `res` 数组也传进去。

- 另外,`sum` 函数内部虽然调用了 `suma` 并得到了单词长度数组,但并没有使用 `res` 数组中的值进行比较,而是错误地使用了字符串本身。

- 检查一下 `suma` 函数中循环结束的条件:当遇到换行符或字符串结束符时停止,但你的字符串末尾是 `\0`,所以循环会正确结束。不过要注意,如果字符串末尾没有空格,最后一个单词的长度会被正确记录。

- 在 `main` 中,`all` 变量似乎多余,直接输出 `answer` 即可。

- 思考一下:如何正确地从 `res` 数组中取出第一个和最后一个单词的长度进行比较?