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

how to get certain elements in C++

本文关键字:元素 获取 C++      更新时间:2023-10-16

我是新手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

但这只给了我一个结果。

将数据存储在结构或类中,例如:

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';

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

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

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

正如你所发现的,你在循环的每次迭代中都会覆盖以前的输入。因此,您需要单独保存每个兄弟姐妹的数据,并且您不知道有多少兄弟姐妹。这是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));
}
}