2014-01-20 30 views
0

我是C++新手,所以原諒我的錯誤;我試圖創建一個程序,要求用戶輸入他們有多少個兄弟姐妹,並根據他們的輸入,寫下兄弟姐妹的姓名年齡性別(用空格分隔)。如何獲得C++中的某些元素

std::string name, age, gender; 
int n; 
std::vector<str::string> siblings; 

std::cout << "How many siblings do you have? "; 
std::cin >> n; 

for (int a=0;a<n;a++){ 
    std::string x; 
    std::cout << "Please enter info for sibling #" << (a+1) << ": "; 
    std::cin >> name; 
    std::cin >> age; 
    std::cin >> gender; 
    x += " " + name; 
    x += " " + age; 
    x += " " + gender; 
    siblings.emplace_back(x) 
} 

比方說,用戶輸入「3」兄弟姐妹的信息:

Michael 14 Male 
Sam 20 Female 
Anna 8 Female 

如何獲得訪問第一兄弟姐妹的年齡,第二個兄弟姐妹的年齡,第三個兄弟姐妹的年齡?和名字一樣?性別?

我試着做

std::cout << age 

但這只不過是給了我一個結果。

+0

通過將每個值存儲到一個數組中,而不是將它全部干擾到一個字符串中。 – John3136

回答

3

存放在一個結構或類的數據,例如:

struct PeopleStats 
{ 
    std::string name, age, gender; 
}; 

然後創建的,而不是一個字符串矢量此類對象的向量,:

std::vector<PeopleStats> siblings; 

然後你輸入循環,而不是將所有數據一起幹擾到一個字符串中,將其存儲在這些對象中的一箇中,然後將該對象放入向量中。

for (int a=0;a<n;a++){ 
    PeopleStats x; 
    std::cout << "Please enter info for sibling #" << (a+1) << ": "; 
    std::cin >> x.name; 
    std::cin >> x.age; 
    std::cin >> x.gender;  
    siblings.emplace_back(x) 
} 

然後你就可以顯示,例如,每個人的年齡是這樣的:

for (auto const & sibling : siblings) 
    std::cout << sibling.age << '\n'; 
1

您需要根據輸入數字「n」動態創建一個數組並存儲每個兄弟節點的詳細信息。

您還可以使用矢量。目前,您只使用字符串來獲取年齡,姓名等等。因此,您只能看到一個輸出。

1
std::vector<std::string> names, ages, genders; 
.. 
for (int a=0;a<n;a++){ 
    std::string x; 
    std::cout << "Please enter info for sibling #" << (a+1) << ": "; 
    std::cin >> name; 
    std::cin >> age; 
    std::cin >> gender; 
    names.push_back(name); 
    ages.push_back(age); 
    genders.push_back(gender); 
} 
std::cout << names[0] << " " << names[1] ... and so on 
+0

push_back和emplace_back有什麼區別? – Kara

+0

@Lalala:http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back - 這有點高級,但也許你可以理解它。 –

+0

如果我想添加另一個信息給同胞 「Fav Food:Pasta」 這將如何工作?因爲白色空間將分隔一切。 – Kara

1

正如你已經發現,你在循環的每次迭代覆蓋以前的投入。所以你需要分別保存每個兄弟姐妹的數據,並且你不知道有多少兄弟姐妹會從頭開始。這是vector的理想用例。讓我們創建一個名爲siblingstruct,它將保存每個兄弟的數據。

struct sibling 
{ 
    std::string name, age, gender; 
}; 

int n; 
std::vector<sibling> siblings; 

std::cout << "How many siblings do you have? "; 
if((std::cin >> n) && (n >= 0)) { // always perform error checking 
    siblings.reserve(n);   // not necessary, but pre-allocates storage 
    for (int a=0;a<n;a++){ 
    sibling s; 
    std::cout << "Please enter info for sibling #" << (a+1) << ": "; 
    std::cin >> s.name; 
    std::cin >> s.age; 
    std::cin >> s.gender; 

    // you should perform error checking for the inputs above too 
    siblings.push_back(std::move(s)); 
    } 
}