如何在C ++中获取某些元素

时间:2014-01-20 04:33:32

标签: 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

但这只会给我一个结果。

4 个答案:

答案 0 :(得分: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 :(得分:1)

您需要根据输入数字'n'动态创建一个数组,并存储每个兄弟姐妹的详细信息。

您也可以使用矢量。目前,您只使用字符串来获取年龄,名称等。因此,您只能看到一个输出。

答案 2 :(得分: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

答案 3 :(得分:1)

正如您所发现的那样,您在循环的每次迭代中都会覆盖以前的输入。因此,您需要单独保存每个兄弟的数据,并且您不知道将开始有多少兄弟姐妹。这是vector的理想用例。让我们创建一个名为struct的{​​{1}}来保存每个兄弟的数据。

sibling