矢量Push_back

时间:2012-08-27 07:27:02

标签: c++ vector push-back string-split

  

可能重复:
  Empty check with string split

我将以下字符串拆分为'&'并将其保存在矢量

const vector<string> vec = split("f0=fname0&l0=lname0&f1=fname1&l1=lname1&f2=fname2&l2=lname2&f3=&l3=","&");

现在我再次用&#39; =&#39;分割拆分字符串。使用以下代码。

vector<string> vec1;
for (std::vector<std::string>::size_type a = 0; a < vec.size(); ++a)
{
     vec1=split(vec.at(a),"=");

}

最后,我只获得了向量&#39; vec&#39;的最后一项。到&#39; vec1&#39;。每次我的vec1指针刷新。但我想在vec1的最后位置添加splitted string。 我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

每次在循环中分配给vec1,因此它只包含最后一对。相反,您应该追加vec1。使用insert函数最简单:

vector<string> vec1;
for (std::vector<std::string>::size_type a = 0; a < vec.size(); ++a)
{
    vector<string> tmp = split(vec.at(a),"=");
    vec1.insert(vec1.end(), tmp.begin(), tmp.end());
}

答案 1 :(得分:0)

你明白矢量是什么吗? 它没有太多的意思,分裂字符串并将它再次放入一个向量“空间”(你可能只是保留了字符串)

我猜你正在使用boost的split()函数..然后跳过for循环然后调用

const vector<string> vec = split("f0=fname0&l0=lname0&f1=fname1&l1=lname1&f2=fname2&l2=lname2&f3=&l3=","&");

for( int i = 0; i <= vec.size(); i++){
cout << i << "#: " << vec.at(i) << endl;
} 

查看向量内容(索引处)

答案 2 :(得分:0)

那是因为您要分配给vec1而不是附加。您正在替换先前生成的内容并以最后一次迭代的结果结束(您可以使用vec1.push_back()来修复它。)

因此,您希望获得带参数的字符串向量,但是您将如何确定哪个值属于哪个参数。 IMO,您最好使用std::map

using std::string;
using std::vector;
using std::map;

vector<stirng> vec = split("f0=fname0&l0=lname0&f1=fname1&l1=lname1&f2=fname2&l2=lname2&f3=&l3=","&");

map<string, string> params;

for (auto it = vec.begin(); it != vec.end(); ++it) {
    vector<string> p = split(*it, "=");
    params.insert(p[0], p[1]);
}

现在,您将拥有params内的值列表,因此您可以params["f0"]