题解 | #参数解析#

参数解析

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来标记引号内与外;除了引号以外其他字符都照抄一遍(该替换的地方替换一下)。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务