题解 | #参数解析#

参数解析

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

全部评论

相关推荐

10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务