解题思路: 还是遍历法, 第一次提交没有审题清楚,要求先打印出 分解后的字符串个数, 具体细节如下:
1、 遍历字符串,对于双引号间的部分 利用flag 参数, flag= 0 && str[i] == ' ' 时,肯定会生成一个 崭新的字符串;
2、 遍历字符串 打印, 需要特别注意的时对于 空格的处理: 按题目中的规则,如果被双引号 囊括,则打印, 否则便换行  

#include <stdio.h>
#include <string.h>

int main(void) {
    char str[1001] = {0};
    fgets(str, 1000, stdin);
    int length = strlen(str) -1;
    int flag = 0;
    int nums = 0;
    for (int i = 0; i < length; i++) {
        if(flag == 0 && str[i] == '"') {
            flag = 1;
            continue;
        } else if(flag == 1 && str[i] == '"') {
            flag = 0;
            continue;
        }
      if (flag == 0 && str[i] == ' ') nums++;
    }
    printf("%d\n", nums+1);  // 个数打印, 数值是 空格数量+1  没啥好说的
    
    for (int i = 0; i < length; i++) {
        if(flag == 0 && str[i] == '"') {
            flag = 1; // 双引号内容开始
            continue; // 遇到双引号 跳到字符串的下一个字符
        } else if(flag == 1 && str[i] == '"') {
            flag = 0;  // 双引号内容结束
            continue;
        }
        
        if(flag == 1 && str[i] == ' ') {
            printf(" "); // 双引号中的空格打印
        } else if (flag == 0 && str[i] == ' ') {
            printf("\n"); // 非双引号中的空格  则换行
        } else {
            printf("%c", str[i]);
        }
    }
    return 0;
}