题解 | #参数解析#
参数解析
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来标记引号内与外;除了引号以外其他字符都照抄一遍(该替换的地方替换一下)。
查看17道真题和解析