2017-09-27 6 views
-2

私は文字列のベクトルを持っています。区切り文字に基づいて文字列のベクトルを分割し、結果を構造体に格納する

Vector <string> myVector; 

現在、myVectorには2つの文字列があります。

myVector[0] is "id1|Name1|Age1" 
myVector[1] is "id2|Name2|Age2" 

ここで、各文字列を区切り記号 "|"に基づいてベクトルに分割したいとします。 を作成し、結果をID、名前、および年齢の構造体に格納します。

体に何か助けてもらえますか?そのような

+1

では、右の関連する質問を見てみましょう。文字列の部分がある場合は、構造体メンバへの通常の割り当ては簡単です。 – chris

+2

[文字列を分割する最もエレガントな方法?](https://stackoverflow.com/questions/236129/most-elegant-way-to-split-a-string) – valleymanbs

答えて

0

何かが、あなたはそれ

struct{ 
    unsigned int id; 
    std::string name; 
    unsigned int age; 
}MyStruct; 

int main() 
{ 
    std::string line; 
    std::vector<std::string> myVector = {"id1|Name1|Age1","id2|Name2|Age2"}; 
    std::vector<MyStruct> myStruct; 
    for (string::const_iterator it = myVector .begin(); it != myVector.end(); it++) 
    { 
    vector<std::string> splitLine; 
    while(std::getline(*it,line,'|')) 
     splitLine.push_back(line); 

    if (splitLine.size()> 0) 
    { 
     MyStruct mSt; 
     mSt.id = (int)splitLine[0]; 
     mSt.name = splitLine[1]; 
     mSt.age= (int)splitLine[2]; 
     myStruct.push_back(mSt); 
    } 
    } 


    return 0; 
} 
+0

可能な複製より読みやすい。 – Jarod42

+0

'(int)splitLine [0]'が間違っています。あなたはおそらく 'atoi' /' stoi'を望んでいます... – Jarod42

+0

@ Jarod42、私はそれをテストしませんでした、それは速いコードでした。あなたは 'atoi/stoi'を使うことができます –

0

これは、SUBSTRと簡単です()をチェックし、発見する必要があります()。

#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

struct Person 
{ 
    string m_id; 
    string m_name; 
    int m_age; 
}; 

int main() 
{ 
    vector<string> data; 
    vector<Person> people; 

    data.push_back("id1|Name1|25"); 
    data.push_back("id2|Name2|35"); 

    for(int i(0); i < data.size(); ++i){ 
     size_t idx = data[i].find("|"); 
     string id = data[i].substr(0, idx); 
     string name = data[i].substr(idx+1, data[i].find_first_of("|", idx) + idx - 1); 
     string age = data[i].substr(data[i].find_last_of("|") + 1); 

     Person p = {id, name, stoi(age)}; 
     people.push_back(p); 

    } 

    for(int i(0); i < people.size(); ++i) 
     cout << people[i].m_id << " " << people[i].m_name << " " << people[i].m_age << endl; 

    return 0; 
} 

と出力が

id1 Name1 25 
id2 Name2 35 
関連する問題