0

可能重复:
使用字符串拆分进行空检查

我用 '&' 分割下面的字符串并将其保存在向量中

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 的最后一个位置添加拆分字符串。我怎样才能做到这一点 ?

4

3 回答 3

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());
}
于 2012-08-27T07:43:44.483 回答
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;
} 

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

于 2012-08-27T07:43:46.410 回答
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"].

于 2012-08-27T07:46:44.883 回答