【发布时间】:2020-01-26 17:38:17
【问题描述】:
我想将数据存储在对象数组中,但我不知道如何拆分字符串。
我想看到的结果是:
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);
}
提前感谢
【问题讨论】:
-
你试过使用正则表达式吗?
-
1) 请提供minimal reproducible example,因为您的示例无法编译。 2)如果你需要搜索多个分隔符,为什么不使用
std::string::find_first_of? -
你考虑过用 find_if 代替 find 吗?这将允许您使用自己的匹配检查功能并检查多个字符
-
我会投票支持重复数据删除:这个问题更具体(更好地说明了实际问题),而目标问题太宽泛,不值得一提它吸引了选票。
标签: c++ string vector split substring