在线编译器 C

// res数组用来存每个单词的长度,函数返回单词的总个数 int suma(char a[], int res[]) { int i = 0,count=0, word_num=0; while(a[i] != '\n' && a[i] != '\0') { if(a[i] == ' '){ res[word_num++] = count; // 把当前单词长度存入数组 count = 0; // 重置计数器 }else{ count++; } i++; } // 处理字符串末尾没有空格的最后一个单词 if(count>0) res[word_num++] = count; return word_num; } int main(){ char str[] = "hello world test"; int len_arr[100]; // 存放每个单词长度 int num = suma(str, len_arr); printf("一共有%d个单词,长度分别是:", num); for(int i=0;i<num;i++){ printf("%d ", len_arr[i]); } return 0; }
这段代码的功能是统计字符串中的单词个数,并将每个单词的长度存入数组。它通过遍历字符串,遇到空格时记录当前单词长度并重置计数器,最后处理末尾单词。

你的代码有一个潜在问题:当字符串末尾有空格时,最后一个单词会被正确跳过,但连续多个空格会导致长度为0的单词被记录。

- 检查当遇到连续空格时,你的代码是否会错误地记录长度为0的单词。考虑在遇到空格时,先判断当前count是否为0,再决定是否存入数组。
- 注意字符串末尾的换行符处理:你的循环条件同时检查了'\n'和'\0',但实际测试字符串中没有换行符,这不会影响当前测试,但思考一下如果字符串末尾有换行符,你的代码是否还能正确工作。