列表

详情


HJ74. 参数解析

描述

在命令行输入如下命令:

xcopy /s c:\\ d:\\e,

各个参数如下:

参数1:命令字xcopy

参数2:字符串/s

参数3:字符串c:\\

参数4: 字符串d:\\e

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


解析规则:

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

4.输入由用例保证,不会出现不符合要求的输入
数据范围:字符串长度:
进阶:时间复杂度:,空间复杂度:

输入描述

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

输出描述

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

示例1

输入:

xcopy /s c:\\ d:\\e

输出:

4
xcopy
/s
c:\\
d:\\e

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-07-26

#include<stdio.h>
#include<string.h>

int main(void)
{
    int count, i, len, flg;
    char cmdin[1000];
    while(gets(cmdin))
    {
        len = strlen(cmdin);
        flg = 0;
        count = 1;
        //参数个数
        for (i=0; i<len; i++)
        {
            if((flg==0) && (cmdin[i] == '"'))
            {
                flg = 1;
            }
            else if((flg==1) && (cmdin[i] == '"'))
            {
                flg = 0;
            }
            else if((flg==0) && (cmdin[i] == ' '))
                count++;
        }
        
        printf("%d\n", count);
        for (i=0; i<len; i++)
        {
            if((flg==0) && (cmdin[i] == '"'))
            {
                flg = 1;
            }
            else if((flg==1) && (cmdin[i] == '"'))
            {
                flg = 0;
            }
            else if((flg==0) && (cmdin[i] != ' '))
                printf("%c", cmdin[i]);
            else if((flg==0) && (cmdin[i] == ' '))
                printf("\n");
            else if(flg==1)
                printf("%c", cmdin[i]);
        }
        printf("\n");
    }
    
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 340KB, 提交时间: 2020-12-20

#include <stdio.h>
#include <string.h>
int main(void)
{
	int i, j, len, idx, arr[88];
	char s[100], ch;
	while(gets(s)){
		len = strlen(s);
		idx = 0;
		for(i=j=0; i<len; ){
			if(s[i]=='"'){
				j = ++i;
				for( ; s[i]!='"'; i++) ;
				s[i] = '\0';
				arr[idx++] = j;
					
				if(i+1<len && s[i+1]==' ') { j = i += 2; continue; }
				j = ++i;
			}
			else{
				for( ; i<len; i++)
					if(s[i]==' ') break;
				if(i<len){
					s[i] = '\0';
					arr[idx++] = j;
					
					j = ++i;
				}
			}
		}
		
		if(j<len){
			printf("%d\n", idx+1);
			for(i=0; i<idx; i++)
				printf("%s\n", s+arr[i]);
			printf("%s\n", s+j);
			continue;
		}
		
		printf("%d\n", idx);
		for(i=0; i<idx; i++)
			printf("%s\n", s+arr[i]);
	}
	return 0;
}

上一题