• 【Day_13 0509】参数解析


    参数解析

    题目来源

    牛客网:参数解析

    题目描述

    在命令行输入如下命令:

    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≤s≤1000
    进阶:时间复杂度:O(n) ,空间复杂度:O(n)

    输入描述

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

    输出描述

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

    示例1

    输入

    xcopy /s c:\ d:\e

    输出

    4
    xcopy
    /s
    c:\
    d:\e

    思路分析

    • 整行获取要用getline()函数,将输入的字符串保存在一个string类对象中
    • 定义一个空串,遍历字符串,遇到正常字符则拼接到该字符串后面,遇到双引号则进行标记,遇到空格符判断如果为分隔符则对字符串入栈
    • 将参数保存在vector类对象中

    代码展示

    #include
    #include
    #include
    using namespace std;
    
    int main() {
        string str;
        while (getline(cin, str))
        {
            vector<string> v;
            int sz = str.size();
            bool flag = false;//标记引号
            string temp = "";//定义临时变量保存一个参数
            for (int i = 0; i < sz; i++)
            {
                //遇到双引号进行标记
                if (str[i] == '"')
                {
                    flag = !(flag);
                }
    
                //分隔符判断
                else if (str[i] == ' ' && !(flag))
                {
                    v.push_back(temp);
                    temp = "";
                }
                else
                {
                    temp += str[i];
                }
            }
            v.push_back(temp);
            cout << v.size() << endl;
            for (int i = 0; i < v.size(); i++)
            {
                cout << v[i] << endl;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    Swin_Unet & Trans_UNet & Unet & Deeplabv3网络推理时间对比
    80211 TIM流量指示图 附C语言实现
    SOLIDWORKS 2024 Electrical全新升级
    如何区分一个项目是react还react native
    怎么将webp格式转换成jpg?详细步骤
    管理类联考——数学——汇总篇——知识点突破——数据分析——记忆
    【SICP】引入与教学大纲
    mysql约束之默认约束default
    日语 11 12
    【Linux】动静态库
  • 原文地址:https://blog.csdn.net/qq_44631587/article/details/126115160