解题思路: 还是遍历法, 第一次提交没有审题清楚,要求先打印出 分解后的字符串个数, 具体细节如下:
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;
}