c++ - 如何用两个不同的分隔符分割字符串
问题描述
我想将数据存储在对象数组中,但我不知道如何拆分我的字符串。
我想看到的结果是:
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);
}
提前感谢
解决方案
我建议您创建一个更通用的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"
}
推荐阅读
- javascript - 有没有办法在JS中将数组随机化到一定长度?
- javascript - 在模态之外单击时暂停 HTML mp4 视频
- r - 在 R 中为 UI 输出编写 `render*()` 和 `*Output()` 函数以实现闪亮
- python - 纸浆中的条件约束
- flutter - Flutter:使用 notifyListeners() 更新小部件状态
- python - PyTorch:向量化循环将一个值从向量添加到向量
- html - 导航栏有点乱
- haskell - Neo4j MERGE ON MATCH ON CREATE 是否有属性最大限制?
- python - 如何使用 django 用外键填写另一个字段?
- javascript - 设置链接以更改
- 内容块