首页 > 试题广场 >

参数解析

[编程题]参数解析
  • 热度指数:158004 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

在命令行输入如下命令:

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
#include <stdio.h>
#include <string.h>

int main() {
    int command_num = 0 ;
    char str[1001];
    memset(str, '\0', 1001);
    int str_p = 0 , inspace = 0;//inspace用于确定当前字符是否在""内部
    gets(str);
    
    //遍历当前存在多少个命令
    for(int i = 0 ; i < strlen(str) ; i++){//统计命令总数
        if(str[i] == '"' && inspace == 0)   inspace = 1;//遇到"一次且此时不在""内部,则将inspace置一
        else if (str[i] == '"' && inspace == 1) inspace = 0;//遇到"一次且此时在""内部,则将inspace置零
        else if (str[i] == ' ' && inspace == 0) command_num++;
    }
    printf("%d\n",command_num + 1);
    
    //输出命令
    inspace = 0;
    for(int i = 0 ; i < strlen(str) ; i++){
        if(str[i] == '"' && inspace == 1)   inspace = 0;           
        else if (str[i] == '"' && inspace == 0)  inspace = 1;
        else if (str[i] == ' ' && inspace == 0) printf("\n");
        else if (str[i] == ' ' && inspace == 1) putchar(str[i]);//遇到空格且在""内部,将空格输出
        else    putchar(str[i]);
    }
    return 0;
}

发表于 2023-12-26 16:36:39 回复(0)
#include <stdio.h>
#include <string.h>

int main()
{
    char input[100];
    fgets(input, sizeof(input), stdin);//fget最后会存储\n和\0

    int num_substrings = 0;
    char *tokens[100]; // 存储分割后的子串,通过指针数组形式
    int inside_quotes = 0; // 检测是否在双引号内部
    char *start=input;
    char *end=input;

    while(*end !='\0'&& start <= end )
    {
        //排除开始是空格
        while(*start==' ')
        {
            start++;
            end++;
        }

        while(*start=='\"')//如果有” “
        {
            end++;
            if(*end=='\"')
            {
                *end='\0';//将空格替换成\0可以达到输出时分割字符串的作用
                num_substrings++;
                tokens[num_substrings-1]=start+1;
                end+=2;
                start =end;
                break;
            }
        }

        if(*end ==' '||*end =='\n')//如果是最后一个子串,结尾是\n
        {
            *end ='\0';
            num_substrings++;
            tokens[num_substrings-1]=start;
            end++;
            start=end;
        }
        end++;
    }
    printf("%d\n",num_substrings);
    for(int i=0;i<num_substrings;i++)
    {
        printf("%s\n",tokens[i]);//从子串第一个开始到遇到\0结束
    }
    return 0;
}

编辑于 2023-12-15 14:39:16 回复(0)
#include <stdio.h>
#include <string.h>

int main() 
{
    char str[1000]={0};
    char a[1000][1000]={0};
    int i=0, j=0, k=0;

    gets(str);

    while(i<strlen(str))
    {
        if(str[i]!=' ' && str[i]!='"')
        {
            a[j][k]=str[i];
            k++;
            i++;
        }
        else if(str[i]==' ')
        {
            j++;
            k=0;
            i++;
        }
        else if(str[i]=='"')
        {
            i++;
            while(str[i]!='"')
            {
                a[j][k]=str[i];
                k++;
                i++;
            }
            i++;
        }
    }
    printf("%d\n",j+1);
    for(i=0;i<=j;i++)
    {
        printf("%s\n",a[i]);
    }
    return 0;
}


发表于 2023-11-29 00:55:08 回复(0)
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main()
{
    int len = 0;
    int flag = 0;
    int cnt = 1;
    char s[1001];
    char res[100][1001];
    gets(s);
    len = strlen(s);
    int j = 0;
    for(int i = 0; i < len; i++){
        if(flag == 0){
            if(s[i] == ' '){
                res[cnt-1][j++] = 0;
                j = 0;
                cnt++;
            }else if(s[i] == '"'){
                flag = 1;
            }else{
                res[cnt-1][j++] = s[i];
            }
        }else{
            if(s[i] == '"'){
                flag = 0;
            }else{
                res[cnt-1][j++] = s[i];
            }
        }
    }
    printf("%d\n", cnt);
    for(int i = 0; i < cnt; i++){
        printf("%s\n", res[i]);
    }
    return 0;
}

发表于 2023-10-31 21:10:24 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[1001] = { '\0' };
    gets(str);
    int num = 0;
    int len = strlen(str);
    int flag = 1;
    for (int i = 0; i < len; i++)
    {
        if (str[i] == '\"')
        {
            if (flag)
            {
                flag = 0;
            }
            else
            {
                flag = 1;
            }
        }
        else if (str[i] == ' ' && flag)
        {
            num++;
        }
    }
    printf("%d\n", ++num);
    flag = 1;
    for (int i = 0; i < len; i++)
    {
        if (flag)
        {
            if (str[i] == '\"')
            {
                flag = 0;
                continue;
            }
            else
            {
                if (str[i] == ' ')
                {
                    printf("\n");
                }
                else
                {
                    printf("%c", str[i]);
                }
            }
        }
        else
        {
            if (str[i] == '\"')
            {
                flag = 1;
                continue;
            }
            else
            {
                printf("%c", str[i]);
            }
        }
    }
    return 0;
}
发表于 2023-10-18 19:02:17 回复(0)
#include <stdio.h>
#define    N    1000
#define    M    50
int main()
{
    char str[N],son[M][N]={'\0'};
    int i=0,j=0,flag=0,k=0;
    gets(str);
    while(str[i]!='\0')
    {
        if(str[i]==' '&&flag==0)
        {
            j++;
            k=0;
        }
        else if(flag==0&&str[i]=='"')
            flag=1;
        else if(flag==1&&str[i]=='"')
            flag=0;
        else
            son[j][k++]=str[i];
        i++;
    }
    printf("%d\n",j+1);
    for(i=0;i<=j;i++)
    {
        printf("%s\n",son[i]);
    }
    return 0;
}
发表于 2022-05-04 10:00:21 回复(0)

//C最强愣头青代码

  1. #include <stdio.h>
    int main()
    {
        char arr[1001]={0};
        gets(arr);
        int len=strlen(arr);
        arr[len]=' ';
        int i,n,j,count=0,flag=0,c=0;
        for(i=0;i<len;i++)
        {
            if(arr[i]==' ')
                count++;
            if(arr[i]=='"')
            {
                i++;
                while(arr[i]!='"')
                {
                    i++;
                }
                i++;
                count++;
            }
        }
        if(arr[len-1]=='"')
            printf("%d\n",count);
        else
            printf("%d\n",count+1);
        for(i=0;i<=len;i++)
        {
            if(arr[i]==' ')
            {
                arr[i]='\0';
                printf("%s\n",&arr[c]);
                c=i+1;
            }
            if(arr[i]=='"')
            {
                i++;
                n=i;
                while(arr[i]!='"')
                {
                    i++;
                    flag++;
                }
                for(j=n;j<n+flag;j++)
                {
                    printf("%c",arr[j]);
                }
                printf("\n");
                flag=0;
                i++;
                c=i+1;
            }
        }
        return 0;
    }

发表于 2022-03-21 14:56:00 回复(0)
#include<stdio.h>

int main()
{
    char buf1[1000];
    
    while(gets(buf1))
    {
        int cnt=0;
        for(int i=0;i<strlen(buf1);i++)
        {
            if(buf1[i] == '"')
            {
                i++;
                while(buf1[i] != '"')
                {
                    i++;
                }
            }
            if(buf1[i] == ' ')
            {
                cnt++;
            }
        }
        printf("%d\n",cnt+1);
        int start =0;
        for(int i=0;i<strlen(buf1);i++)
        {
            if(buf1[i] == '"')
            {
                i++;
                while(buf1[i] != '"')
                {
                    i++;
                }
            }
            if(buf1[i] == ' ')
            {
                for(int j=0;j<=i-start;j++)
                {
                    if(buf1[start+j]!='"')
                        printf("%c",buf1[start+j]);
                }
                printf("\n");
                start = i+1;
            }
        }
        for(int j=0;j<strlen(buf1)-start;j++)
                {
                    if(buf1[start+j]!='"')
                        printf("%c",buf1[start+j]);
                }
        printf("\n");
    }
}


发表于 2021-08-21 16:25:25 回复(0)
C语言解答:

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

int main()
{
    char str[1000];
    while (gets(str)) {
        int flag = 0;
        int len = strlen(str);
        
        for (int i = 0; i < len; i++) {
            if (str[i] == '"') {
                i = i + 1;
                while (str[i] != '"') {
                    i++;
                }
            }
            if (str[i] == ' ') {
                flag++;
            }
        }
        flag = flag + 1;
        printf("%d\n", flag);
        for (int j = 0; j < len; j++) {
            if (str[j] == ' ') {
                printf("\n");
            } else if (str[j] != ' ' && str[j] != '"') {
                printf("%c", str[j]);
            } else if (str[j] == '"') {
                j = j + 1;
                while (str[j] != '"') {
                    printf("%c", str[j]);
                    j++;
                }
                continue;
            }
        }
    }
    return 0;
}
发表于 2021-07-14 15:45:09 回复(0)

问题信息

难度:
11条回答 36246浏览

热门推荐

通过挑战的用户

查看代码