【nowcoder】字符串参数解析

题目描述

在命令行输入如下命令:

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),则可以有空格。


欢迎讨论交流~
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值