编辑代码

#include <iostream>
using namespace std;

int remove_last_substr(std::string& main_str, const std::string& sub_str) {
    size_t pos = main_str.rfind(sub_str);  // 查找子串的最后一个位置

    if (pos != std::string::npos) {
        main_str.erase(pos, sub_str.length());  // 删除子串
    }
    return 0;
}

int remove_url_parameter(std::string& url, const std::string& param_name) {
    // 从最后一个问号开始查找参数
    std::string::size_type param_start_pos = url.rfind("?");
    if (param_start_pos == std::string::npos) {
        return 0;
    }
    // 查找?name=value 和 &name=value
    std::string::size_type param_pos = url.find("?" + param_name + "=", param_start_pos);
    cout << "param_pos1:" << param_pos << endl;

    // 若?name=value未找到,继续查找&name=value
    if (param_pos == std::string::npos) {
        param_pos =  url.find("&" + param_name + "=", param_start_pos);
    } 
    cout << "param_pos2:" << param_pos << endl;
    if (param_pos != std::string::npos) {
        // 找到参数结束位置
        std::string::size_type param_end_pos = url.find('&', param_pos + 1);
        cout << "param_end_pos2:" << param_end_pos << endl;
        if (param_end_pos != std::string::npos) {
            url.erase(param_pos + 1, param_end_pos - param_pos);
        } else {
            // 没有其他参数,连带删除前面的字符
            url.erase(param_pos);
        }
    }

    return 0;
}

// 用于删除URL中的指定参数
int remove_url_parameter2(std::string& url, const std::string& param_name) {
    
    std::vector<std::string> params;
    boost::split(params, url, boost::algorithm::is_any_of("&"));

    std::vector<std::string> left_params;
    int param_index = 0;
    for (std::string& param : params) {
        std::vector<std::string> kv;
        std::string 
        param_index++;
        boost::split(kv, param, boost::algorithm::is_any_of("="));
        if (kv.size() != 2) {
            continue;
        }
        if (param_index == 0) {
            std::vector<std::string> prefix_param;
            // 第一个参数只取?后面的部分作为识别参数名
            boost::split(prefix_param, kv[0], boost::algorithm::is_any_of("?"));
            if (prefix_param.size() < 2) {
                continue;
            }
        }
        if (kv[0] == param_name) {
            continue;
        }
        left_params.push_back(param);
    }

    return 0;
}

int main() {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    string a = "xc=1?cc=2c=3&cc=4&c=&b=2&c=6&c=7";
    remove_url_parameter(a, "c");
	cout << a << endl;
	return 0;
}