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ループ内の毎回に割り当てるため、最後のペアのみが含まれます。代わりに、に追加する必要がありますvec1insertこれは、次の関数を使用して最も簡単に実行できます。

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

ベクトルってわかりますか?文字列を分割し、それを 1 つのベクトル「スペース」に再びまとめることはあまり意味がありません (文字列をそのままにしておくこともできます)。

ブーストの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 に答える