Vector Push_back

Vector Push_back

本文关键字:back Push Vector      更新时间:2023-10-16

可能重复:
带字符串拆分的空支票

我用"&"分隔下面的字符串并将其保存在矢量中

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

现在,我再次使用下面的代码用'='分割分割的字符串。

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

最后,我只得到向量"vec"到"vec1"的最后一项。每次我的vec1指针刷新时。但我想在vec1的最后一个位置添加分裂的字符串。我该怎么做?

在循环中每次都分配给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());
}

你知道向量是什么吗?拆分字符串并将其再次放在一个向量"空间"中(那时你可以保留字符串)

我猜您使用的是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;
} 

查看矢量内容(在索引处)

这是因为您要分配给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"]