gpt4 book ai didi

c++ - 通过多个定界符解析 C++ 中的字符串

转载 作者:行者123 更新时间:2023-11-27 22:58:43 25 4
gpt4 key购买 nike

我有一个类似于这样的字符串对象:

string test = "
[3, 4, 8, 10, 10]\n[12]\n[12, 10,\n 20]
"

我正在尝试将其解析为 3 个独立的数组,分别为 [3、4、8、10、10]、[12] 和 [12,10, 20]。我之前已经将逗号分隔的整数解析为一个数组,但我该如何解析这个数组。不幸的是,我拥有的数据可以在数组中间有换行符,否则我会使用“getline”函数(将文件读入字符串时)并简单地忽略括号。

似乎我需要首先将每个数组放入由方括号分隔的自己的字符串中,然后通过逗号分隔将每个数组解析为整数数组。这行得通吗?

如果是这样,我如何通过括号将字符串拆分为以前未知数量的其他字符串?

最佳答案

您可以为此使用流和 std::getline(),因为 std::getline() 将分隔符作为参数:

int main()
{
std::string test = "[3, 4, 8, 10, 10]\n[12]\n[12, 10,\n 20]";

// make data a stream (could be a std::ifstream)
std::istringstream iss(test);

// working vars
std::string skip, item;

// between square braces
// skip to the opening '[' then getline item to the closing ']'
while(std::getline(std::getline(iss, skip, '['), item, ']'))
{
// item = "3, 4, 8, 10, 10"

// store numbers in a vector (not array)
std::vector<int> v;

// convert item to a stream
std::istringstream iss(item);

// separated by commas
while(std::getline(iss, item, ','))
v.push_back(std::stoi(item));

// display the results
std::cout << "list:" << '\n';
for(auto i: v)
std::cout << "\t" << i << '\n';
}
}

输出:

list:
3
4
8
10
10
list:
12
list:
12
10
20

关于c++ - 通过多个定界符解析 C++ 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com