题解 | #参数解析#

参数解析

http://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677

#include <cstring>
#include<iostream>
#include<vector>
using namespace std;

// 参数解析
void split(string str, vector<string>& v){
    if(str.empty())
        return;
    size_t start = str.find('"');
    if(start != string::npos){
        split(str.substr(0, start), v); // 解析左边不含引号的字符串
        
        size_t end = str.find('"', start+1); // 获取第二个引号的位置
        v.push_back(str.substr(start+1, end-start-1)); // 两个引号之间的内容就是一个参数
        
        split(str.substr(end+1), v); // 解析右边的字符串,可能还有引号
    }else{
        // 如果没有引号,则直接按照空格来分割
        char* cstr = new char[str.size()+1];
        strcpy(cstr, str.c_str());
        char* p = strtok(cstr, " ");
        while(p != 0){
            v.push_back(string(p));
            p = strtok(NULL, " ");
        }
    }
}

int main(){
    vector<string> v;
    string str;
    getline(cin, str);
    
    // 通过获取'"' 的位置,将字符串分成3部分,先解析引号左边的,然后引号中间的,最后解析引号右边的
    split(str, v);
    cout << v.size() << endl;
    for(auto it = v.begin(); it != v.end(); it++){
        cout << *it << endl;
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
01-15 20:52
黑皮白袜臭脚体育生:五宿大战是吧,死去的记忆还在攻击我
点赞 评论 收藏
分享
2025-12-28 10:21
已编辑
大连理工大学 产品经理
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务