如何在C++中获取某些元素
how to get certain elements in 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
但这只给了我一个结果。
将数据存储在结构或类中,例如:
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
的理想用例。让我们创建一个名为sibling
的struct
,用于保存每个同级的数据。
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));
}
}
相关文章:
- 对于set上的循环-获取next元素迭代器
- 在 alglib::real_1d_array 中获取元素总和的奇怪错误
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- push_back通过自行创建的对象获取最后一个元素的向量
- 从自定义类获取对象向量中的 max 元素
- 从 c++ 中的链表中获取元素
- 比较它们之间的元素并获取公共值的键
- 获取指向指针的指针元素 (c++)
- CPtrList - 如何获取元素的索引?
- 如何从一个容器中获取某些元素并将其转换插入到另一个容器中?
- 获取结构 c++ 中元素的索引
- 如何获取指针数组中的元素数量?
- 在std::集中获取与给定元素最接近的元素
- 无法获取已填充堆栈<char>的顶部元素
- 检查HTML 5视频元素是否正在获取帧
- 有没有函数可以直接获取 std::vector 元素的大小?
- 从矢量的元素获取指针
- 从 /dev/sd* 元素获取 /dev/disk/by-id 元素
- 2d查找重复元素/获取索引位置并计数重复项
- 为什么来自 rvalued-stl-container 的元素获取者返回左值