#include <stdio.h>
#include <string.h>
int main()
{
char str[1001] = {0};
int quotation = 0;
int num = 0;
int len = 0;
if(gets(str) != NULL)
{
len = strlen(str);
/* 由于下面要是用 strtok,会造成原字符串数据改变,保存一份备用 */
char *temp = malloc(len);
memcpy(temp, str, len);
/* 分割查找参数个数 */
char* split = strtok(temp, " ");
while(split != NULL)
{
if(split[0] == '\"')
{
if(split[strlen(split) - 1] == '\"')
{
num++;
}
else
{
quotation++;
}
}
else if(split[strlen(split) - 1] == '\"')
{
num++;
quotation--;
}
else if(!quotation)
{
num++;
}
split = strtok(NULL, " ");
}
char* split1 = strtok(str, " ");
printf("%d\n", num);
quotation = 0;
/* 分割并输出参数字符串 */
while(split1 != NULL)
{
if(split1[0] == '\"')
{
/* 双引号中不含空格 */
if(split1[strlen(split1) - 1] == '\"')
{
/* 去掉双引号输出 */
split1[strlen(split1) - 1] = '\0';
printf("%s\n", &split1[1]);
}
else /* 双引号中含有空格 */
{
/* 输出时需加上空格,并去掉双引号 */
printf("%s ", &split1[1]);
/* 标志参数为 前双引号开始 */
quotation++;
}
}
else if(split1[strlen(split1) - 1] == '\"') /* 参数 后双引号结束 */
{
/* 去掉双引号输出 */
split1[strlen(split1) - 1] = '\0';
quotation--;
printf("%s\n", split1);
}
else if(quotation)
{
/* 双引号参数 含空格 中的数据 */
printf("%s ", split1);
}
else
{
printf("%s\n", split1);
}
split1 = strtok(NULL, " ");
}
if(temp != NULL)
{
free(temp);
temp = NULL;
}
}
return 0;
}