题解 | #参数解析#
参数解析
http://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677
#include <stdio.h> #include <stdlib.h> #define bool _Bool int main() { char c; bool flag = 0; // true: within a pair of quotation marks int argc = 0; char *argv = (char*)calloc(1024, sizeof(char)); char *line = argv; while (EOF != (c = getchar() )) { if ('"' == c) { flag = !flag; } else if(' ' == c && !flag){ *argv = '\n'; argv++; argc++; } else { *argv = c; argv++; } } if (strlen(line) != 0) { argc ++; } printf("%d\n%s", argc, line); free(line); return 0; }
解析规则:
请在这里输入引用内容
1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s "C:\program files" "d:"时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将""去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入
【后记】为什么大家都写那么复杂……由于题目只需要打印出来,而不是获取参数字符串,所以只要把引号之外的空格替换为\n就好了;由于引号成对,故可以用一个flag来标记引号内与外;除了引号以外其他字符都照抄一遍(该替换的地方替换一下)。