【nowcoder】字符串参数解析

来源:互联网 发布:mac 炉石传说 插件 编辑:程序博客网 时间:2024/05/21 15:33

题目描述

在命令行输入如下命令:

xcopy /s c:\ d:\,

各个参数如下: 

参数1:命令字xcopy 

参数2:字符串/s

参数3:字符串c:\

参数4: 字符串d:\

请编写一个参数解析程序,实现将命令行各个参数解析出来。

 

解析规则: 

1.参数分隔符为空格 
2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将“”去掉,引号不存在嵌套情况。
3.参数不定长 
4.输入由用例保证,不会出现不符合要求的输入 
 

 

输入描述:

输入一行字符串,可以有空格

输出描述:

输出参数个数,分解后的参数,每个参数都独占一行

以下是我的通过代码。
#include<stdlib.h>#include<stdio.h>int main()    {    char a[1000];//参数字符数组     char c;    int i=0,n=0,j=0,k=0;    int p[100];//参数之间空格为止记录数组     while((c=getchar())!='\n')//单个读取参数字符,直到回车为止         {        if(c=='"')//这个if处理用引号括起来的参数            {            while((c=getchar())!='"')//不断读取引号内的字符直到引号结束,这样就可以把引号内的空格读入,同时没有读入引号                 {                a[i]=c;        i++;            }       }        else if(c==32)//参数之间的分隔空格的处理             {            n++;//n记录参数之间空格的个数 ,参数个数为n+1             a[i]=c;            p[j]=i;//记录空格的位置,之后输出参数的时候要用             j++;            i++;        }        else            {            a[i]=c;            i++;        }    }               printf("%d\n",n+1);    j=0;        while(j<i)//遍历参数数组         {        if(j==p[k]){如果遍历到空格位置,不输出空格而是换行            printf("\n");           k++;        j++;        }else        {        printf("%c",a[j]);        j++;        }     }}
我的思路是第一遍循环先单个读入字符,记录下参数分隔空格的位置和个数,去掉引号,放入字符数组中。然后输出参数个数。
第二遍循环根据当前数组遍历的位置判断是否为参数分隔空格处,如果是则输出换行符,不是的话则一次输出参数。
运行结果如图所示。

C语言知识点回顾:
字符串读取的三种方式:
1.getchar() 读取单个字符,以换行判断是否结束输入。
2.gets() 可以接收有空格的字符串,以换行结束输入,最后默认写入\0作为字符串结束标志。
3.scanf("%s",str)   只接收空格之前的字符串,但是若写成scanf("[^\n]",str),则可以有空格。


欢迎讨论交流~
原创粉丝点击