【发布时间】:2021-06-16 00:53:07
【问题描述】:
基本上我有字符串形式的图像坐标。我有这两个字符串的向量,并且我正在使用一些分隔符对其进行解析。解析正在正确完成,并且第一个 push_back 到 vector"" vector1 也是如此。但是,当我在 while 循环之后再次应用 push_back 以将 vector1 存储在 vector">" vector2 中(因为我想稍后构建多个 vector""s) vector2 的结果重复了 vector1[0] 2 次,答案是 123456123456789101112。我想要 123456789101112。
我做错了什么? 出于问题的目的,我自己构建了示例 vector"" 结果; 但我是从原始代码中的另一个函数中获取它的。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
size_t beg, pos = 0;
string s = "[[[1 2]] [[3 4]] [[5 6]]]";
string t = "[[[7 8]] [[9 10]] [[11 12]]]";
vector<string> resultvec;
resultvec.push_back(s);
resultvec.push_back(t);
string const delims{ "[] " };
vector<string> vector1;
vector<vector<string>> vector2;
for(int i=0; i<resultvec.size(); i++)
{
while ((beg = resultvec[i].find_first_not_of(delims, pos)) != string::npos)
{
pos = resultvec[i].find_first_of(delims, beg + 1);
{
vector1.push_back(resultvec[i].substr(beg, pos - beg));
//cout << resultvec[i].substr(beg, pos - beg) << endl;
}
}
beg = 0;
pos = 0;
vector2.push_back(vector1);
}
cout<<"==========vector1==============="<<endl;
for(int i = 0; i<vector1.size();i++)
{
cout<<vector1[i]<<endl;
}
cout<<"==========vector2==============="<<endl;
for(int i = 0; i < vector2.size(); i++)
{
for(int j = 0; j < vector2[i].size(); j++)
{
cout<<vector2[i][j]<<endl;
}
}
}
输出
===========vector1================
1
2
3
4
5
6
7
8
9
10
11
12
===========vector2==============
1
2
3
4
5
6
1
2
3
4
5
6
7
8
9
10
11
12
我想要
===========vector1================
1
2
3
4
5
6
7
8
9
10
11
12
===========vector2==============
1
2
3
4
5
6
7
8
9
10
11
12
【问题讨论】:
-
result2在没有声明的情况下使用。请发帖Minimal, Reproducible Example。 -
当您使用调试器运行此程序时,一次运行一行,并监控所有这些变量和向量中的内容,以及在执行程序的每一行后它们如何变化(如报告您的调试器)您看到了什么,预期结果何时开始与您的预期结果不同?
-
resulvec和r也可以在没有声明的情况下使用。 -
您是否在发布问题时匆忙输入代码?您应该退后一步,确保您实际发布的最终代码能够编译并产生您声称的结果,而不是尝试进行在线实时编辑。
-
你应该在循环之后移动
vector2.push_back(vector1);,让它只执行一次。否则,vector2将有多个元素,这会使vector1和vector2的内容不同,因为打印vector2意味着至少打印vector1的所有元素。
标签: c++ string parsing vector delimiter