【发布时间】:2020-12-19 13:26:44
【问题描述】:
我在大学考试的一个编码问题中遇到了这个问题,我知道答案但无法理解,因为我不知道如何解析字符串并将其转换为二维向量。 所以我得到了一个字符串形式的二维向量
"[[1,4], [5,7], [4,1], [8,9]]"
我想把这个字符串转换成vector<vector<int>>
编辑
也许我上次并不清楚,我错过了一件事。字符串是
"[[1,4], [5,7], [4,1], [8,9]]"
我希望这个字符串是二维向量的形式。所以,假设我有一个向量vec 定义为vector<vector<int>> vec。然后vec[0]={1,4}, vec[1]={5,7}, vec[2]={4,1}, vec[3]={8,9}。以下是我所做的,它显示不正确的输出
#include<iostream>
#include<sstream>
#include<vector>
using namespace std;
int main()
{
string str="[[1,4], [5,7], [4,1], [8,9]]";
stringstream ss(str);
vector<vector<int>> vec;
string temp;
while(ss>>temp){
cout<<temp<<endl;
vector<int> t;
int x,y;
stringstream ss2(temp);
while(ss2>>x>>y)
{
t.push_back(x);
t.push_back(y);
}
vec.push_back(t);
}
}
【问题讨论】:
-
请提供一个 end-2-end 示例,即此字符串应成为此对象。有很多方法可以从您的示例字符串中获取向量的向量。然后提供您迄今为止尝试过但不起作用的方法。
-
,和,是两个不同的分隔符吗?这种格式是固定的吗?在这种情况下,您可以先删除前两个字符和后两个字符,以], [分割,然后以,分割。 -
这实际上是这个问题的一个变体:stackoverflow.com/questions/1120140/…。该解决方案只需要小幅调整
-
这能回答你的问题吗? stackoverflow.com/questions/1120140/…
-
对此类事情的一般建议: 1. 尝试编写可以在以后重用的通用函数。例如,可以分隔给定字符串的函数,即字符串 -> 字符串向量。 2. 考虑创建一个状态机。有一个阶段的枚举,然后是一个带有当前阶段切换的大循环。使用这种技术,您可以做很多事情。 3. 如果你在 SO 上提出要求,请在你身边表现出一些努力。如果您需要任何类型的开始,请考虑您可以像遍历数组一样遍历字符串的字符。