5.2结构体数组

上一篇博客是关于结构体的简单介绍,了解到结构体就是我们根据自己的需要建立的一种数据类型,允许用户存储不同的数据类型,而结构体数组是:定义一个数组时,元素类型为结构类型。
在结构体数组中存放的每一个数据都是我们自定义的数据类型。
作用: 将自定义的结构体放到一个数组中方便维护和访问。

语法:struct 结构体名 数组名[元素个数]
  • 应该就跟普通数组基本一样,只是数组的类型换成了结构体
    结构体数组可以在定义的时候进行赋初始值:数组名[元素个数] = { {} ,{} ,… {} }
    仍然使用上一部分的demo来进行演示:
//首先是进行结构体的定义
struct student 
{
   string name;
   int age;
   int score;
};
int main()
{
   //创建结构体数组
   struct student class[3] = //允许换行操作,此处换行是为了美观
   {
   {"student1",18,90},//数组中的两个元素之间仍然是用逗号隔开
   {"student2",23,77},
   {"student",19,60}
   };
    //还可以跟普通数组一样进行赋值,但是要使用“.”访问
    //例如将数组中的第2号位的信息进行更改
    class[2].name = "student3";
    class[2].age = 20;
    class[2].score = 66;
}

对于结构体数组中的元素进行赋值
也可以跟普通的数组一样使用for循环进行赋值
但是示例中的数组,由于定义的结构体成员值是三个,所以此数组每个元素都包括三个数据成员
class[0].name class[0].age class[0].score
class[1].name class[1].age class[1].score
class[2].name class[2].age class[2].score
所以在使用for循环的时候要对于每一个值进行赋值

forint i= 0;i < 3 ;i++)
  cin >> class[i].name >> class[i].age >> class[i].score;
  //输出同
应用举例:

对候选人得票的统计程序

  1. 设有3个候选人,最终只能有1人当选。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。
#include <iostream>
#include <cstring>
using namespace std;
struct candidate
{
   char name[20];//姓名
   int count;//得票数统计
};
int main()
{
   candidate leader[3] = {"can1",0,"can2",0,"can3",0}
   char vote[20];//此处依次输入的是10人所投的候选人姓名
   for(int i = 0;i < 10;i++)
   {
     cin>>vote;
     for(int m = 0;m < 3 ;m++ )
         if(strcmp(vote,candidate[m].name)==0)
            candidate[m].count++;
   }
   cout<<"得票统计"<<endl;
   for(int i = 0;i < 3;i++ }
       cout<<candidate[i].name<<" : "<<candidate[i].count<<endl;
return 0;
}
  1. num只小白鼠(1 < num < 100),每只白鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。帽子的颜色用“red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。
    输入
    第一行为一个整数num,表示小白鼠的数目。下面有num行,每行是一只白鼠的信息。第一个为不大于1000的正整数,表示白鼠的重量,;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。注意:白鼠的重量各不相同。
    输出
    按照白鼠的重量从大到小的顺序输出白鼠的帽子颜色。
//这道题可以用两个数组来完成,一个数组是重量,另一个是帽子颜色
//现在用结构体数组来试一下
#include<iostream>
using namespace std;
struct whitemouse{
    int weight;
    char color[20];
  };
int main()
  {
  int num;
  cin>>num;//小白鼠的个数
  struct whitemouse mouse[num],temp;//先输入小白鼠的个数,然后再开一个数组,可能有些编译器是不能通过的,如果不能通过可以定义一个全局的固定量num,满足题目的条件即可
  for(int i = 0;i < num;i++)
      cin>> mouse[i].weight >> mouse[i].color;
  for(int i = 1;i < num;i++)
    for(int m = 0; m <= num-1-i;m++)
       if(mouse[m].weight<mouse[m+1].weight)
          {
            temp=mouse[m].weight;//手动交换,也可以用swap函数进行交换
            mouse[m].weight=mouse[m+1].weight;
            mouse[m+1] = temp;
          }
  for(int i=0; i<num; i++)
     cout<<mouse[i].color<<endl;
  return 0;
  }


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值