首页 > 解决方案 > 如何用两个不同的分隔符分割字符串

问题描述

我想将数据存储在对象数组中,但我不知道如何拆分我的字符串。

我想看到的结果是:

tab[0].username = "user1"
tab[0].ip = "192.168.0.1"
tab[1].username = "user2"
tab[1].ip = "192.168.0.2"
tab[2].username = "user3"
tab[2].ip = "192.168.0.3"

这是我的字符串的外观:

user1:192.168.0.1|user2:192.168.0.2|user3:192.168.0.3

我目前拥有的代码,仅允许您在不管理管道的情况下进行拆分:

void addInTab(std::vector<std::string> vec, client *tab, int total_user)
{

    for(int i = 0; i < 2; ++i) {
        if (i == 0)
            tab[total_user].username = vec[i];
        if (i == 1)
            tab[total_user].ip = vec[i];
    }
}

void split(std::string str, char delim)
{
    std::vector<std::string> vec;
    std::string::size_type tmp = str.find(delim);

    while(tmp != std::string::npos) {
        vec.push_back(str.substr(0, tmp));
        str = str.substr(tmp + 1);
        tmp = str.find(delim);
    }
    vec.push_back(str);
    addInTab(vec);
}

提前感谢

标签: c++stringvectorsplitsubstring

解决方案


我建议您创建一个更通用的split函数版本,它返回向量而不是调用一些特殊函数。

然后你可以先调用它来分割管道字符,然后在循环中再次调用它来分割每个子字符串。

像这样的东西

std::vector<std::string> split(std::string str, char delim);

// ...

for (auto pair : split(original_input_with_pipes, '|'))
{
    // Here pair is a string containing values like "user1:192.168.0.1" etc.

    auto values = split(pair, ':');  // Split each pair

    // Now values[0] should be e.g. "user1"
    // and values[1] should be "192.168.0.1"
}

推荐阅读