C++结构体数组
时间:2014-10-22 21:59 点击:次
一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。
定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可。如:
也可以直接定义一个结构体数组,如:
或
结构体数组的初始化与其他类型的数组一样,对结构体数组可以初始化。如:
定义数组stu时,也可以不指定元素个数,即写成以下形式:
stu[ ]={{…},{…},{…}};
编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。一个结构体常量应包括结构体中全部成员的值。
当然,数组的初始化也可以用以下形式:
Student stu[ ]={{…},{…},{…}}; //已事先声明了结构体类型Student
由上可以看到,结构体数组初始化的一般形式是在所定义的数组名的后面加上 ={初值表列};
【例7.2】对候选人得票的统计程序。设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。
可以定义一个候选人结构体数组,包括3个元素,在每个元素中存放有关的数据。程序如下:
运行情况如下:
Zhang↙ (每次输入一个候选人的姓名)
Li↙
Fun↙
Li↙
Zhang↙
Li↙
Zhang↙
Li↙
Fun↙
Wang↙
Li:4 (输出3个候选人的姓名与最后得票数)
Zhang:3
Fun:2
程序定义一个全局的结构体数组leader,它有3个元素,每一元素包含两个成员,即name(姓名)和count(得票数)。在定义数组时使之初始化,使3位候选人的票数都先置零。
在这个例子中,也可以不用字符数组而用string方法的字符串变量来存放姓名数据,程序可修改如下:
运行情况与前相同。显然后一个程序节省内存空间,使用更方便,易读性更好。但是 有些C++系统不能对包含string成员的结构体变量初始化,需要作一些修改才能运行, 读者可上机试一下。
定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可。如:
- struct Student //声明结构体类型Student
- {
- int num;
- char name[20];
- char sex;
- int age;
- float score;
- char addr[30];
- };
- Student stu[3]; //定义Student类型的数组stu
struct Student //声明结构体类型Student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu[3]; //定义Student类型的数组stu
也可以直接定义一个结构体数组,如:
- struct Student
- {
- int num;
- char name[20];
- char sex;
- int age;
- float score;
- char addr[30];
- }stu[3];
struct Student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[3];
- struct
- {
- int num;
- char name[20];
- char sex;
- int age;
- float score;
- char addr[30];
- }stu[3];
struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[3];
结构体数组的初始化与其他类型的数组一样,对结构体数组可以初始化。如:
- struct Student
- {
- int num;
- char name[20];
- char sex;
- int age;
- float score;
- char addr[30];
- }stu[3]={
- {10101,″Li Lin″, ′M′, 18,87.5, ″103 Beijing Road″},
- {10102,″Zhang Fun″,′M′,19,99, ″130 Shanghai Road″},
- {10104,″Wang Min″,′F′, 20,78.5, ″1010 Zhongshan Road″}
- };
struct Student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[3]={ {10101,″Li Lin″, ′M′, 18,87.5, ″103 Beijing Road″}, {10102,″Zhang Fun″,′M′,19,99, ″130 Shanghai Road″}, {10104,″Wang Min″,′F′, 20,78.5, ″1010 Zhongshan Road″} };
定义数组stu时,也可以不指定元素个数,即写成以下形式:
stu[ ]={{…},{…},{…}};
编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。一个结构体常量应包括结构体中全部成员的值。
当然,数组的初始化也可以用以下形式:
Student stu[ ]={{…},{…},{…}}; //已事先声明了结构体类型Student
由上可以看到,结构体数组初始化的一般形式是在所定义的数组名的后面加上 ={初值表列};
结构体数组应用举例
下面举一个简单的例子来说明结构体数组的定义和引用。【例7.2】对候选人得票的统计程序。设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。
可以定义一个候选人结构体数组,包括3个元素,在每个元素中存放有关的数据。程序如下:
- #include <iostream>
- using namespace std;
- struct Person //声明结构体类型Person
- {
- char name[20];
- int count;
- };
- int main( )
- {
- //定义Person类型的数组,内容为3个候选人的姓名和当前的得票数
- Person leader[3]={"Li",0,"Zhang",0,"Fun",0};
- int i,j;
- char leader_name[20]; //leader_name为投票人所选的人的姓名
- for(i=0;i<10;i++)
- {
- cin>>leader_name; //先后输入10张票上所写的姓名
- for(j=0;j<3;j++) //将票上姓名与3个候选人的姓名比较
- //如果与某一候选人的姓名相同,就给他加一票
- if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;
- }
- cout<<endl;
- for(i=0;i<3;i++) //输出3个候选人的姓名与最后得票数
- {
- cout<<leader[i].name<<":"<<leader[i].count<<endl;
- }
- return 0;
- }
#include <iostream> using namespace std; struct Person //声明结构体类型Person { char name[20]; int count; }; int main( ) { //定义Person类型的数组,内容为3个候选人的姓名和当前的得票数 Person leader[3]={"Li",0,"Zhang",0,"Fun",0}; int i,j; char leader_name[20]; //leader_name为投票人所选的人的姓名 for(i=0;i<10;i++) { cin>>leader_name; //先后输入10张票上所写的姓名 for(j=0;j<3;j++) //将票上姓名与3个候选人的姓名比较 //如果与某一候选人的姓名相同,就给他加一票 if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } cout<<endl; for(i=0;i<3;i++) //输出3个候选人的姓名与最后得票数 { cout<<leader[i].name<<":"<<leader[i].count<<endl; } return 0; }
Zhang↙ (每次输入一个候选人的姓名)
Li↙
Fun↙
Li↙
Zhang↙
Li↙
Zhang↙
Li↙
Fun↙
Wang↙
Li:4 (输出3个候选人的姓名与最后得票数)
Zhang:3
Fun:2
程序定义一个全局的结构体数组leader,它有3个元素,每一元素包含两个成员,即name(姓名)和count(得票数)。在定义数组时使之初始化,使3位候选人的票数都先置零。
在这个例子中,也可以不用字符数组而用string方法的字符串变量来存放姓名数据,程序可修改如下:
- #include <iostream>
- #include <string>
- using namespace std;
- struct Person
- {
- string name;//成员name为字符串变量
- int count;
- };
- int main( )
- {
- Person leader[3]={"Li",0,"Zhang",0,"Fun",0};
- int i,j;
- string leader_name;// leader_name为字符串变量
- for(i=0;i<10;i++)
- {
- cin>>leader_name;
- for(j=0;j<3;j++)
- if(leader_name==leader[j].name) leader[j].count++//用“==”进行比较
- }
- cout<<endl;
- for(i=0;i<3;i++)
- {
- cout<<leader[i].name<<":"<<leader[i].count<<endl;
- }
- return 0;
- }
#include <iostream> #include <string> using namespace std; struct Person { string name;//成员name为字符串变量 int count; }; int main( ) { Person leader[3]={"Li",0,"Zhang",0,"Fun",0}; int i,j; string leader_name;// leader_name为字符串变量 for(i=0;i<10;i++) { cin>>leader_name; for(j=0;j<3;j++) if(leader_name==leader[j].name) leader[j].count++//用“==”进行比较 } cout<<endl; for(i=0;i<3;i++) { cout<<leader[i].name<<":"<<leader[i].count<<endl; } return 0; }
顶一下
(2)
100%
踩一下
(0)
0%
上一篇:C++结构体变量的引用
下一篇:C++指向结构体变量的指针
相关内容:
最新内容
热点内容
- QQ群
-
微信
- 返回首页
- 返回顶部