结构体数组(C++)
1.定义结构体数组
和定义结构体变量类似,定义结构体数组时只需声明其为数组即可。如:
struct Student{ int num; char name[20]; char sex[5]; int age; float score; char addr[30]; }; Student stu[3]; //定义Student类型的数组stu
2.结构体数组的应用举例
题目:对候选人的票的统计程序。
设有3个候选人,最终只能有一个当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后能输出这3个候选人的的票结果。
#include<iostream> using namespace std; struct Person{ char name[20]; //姓名 int count; //票数计数器 }; int main(){ Person leader[3]={"Tom",0,"Neo",0,"Marry",0}; //定义Person类型的数组,内容为3个候选人的姓名和票数 int i,j,k=0; bool tag; cout<<"please input the name of the leader : Tom Neo Marry\n\n"; char leadername[20]; //该数组为每次输入的候选人的名字 for(i=0;i<10;i++){ //循环输入这10个人选的候选人的名字 cout<<"input name "<<i+1<<" :"; cin>>leadername; tag=1; for(j=0;j<3;j++){ if(strcmp(leadername,leader[j].name)==0){ leader[j].count++; tag=0; } } if(tag==1)k++; } cout<<endl; for(i=0;i<3;i++){ cout<<leader[i].name<<":"<<leader[i].count<<endl; } cout<<"Abandoned tickets:"<<k<<endl; return 0; }
当然,如果不使用结构体也可以解决这个问题:
#include<iostream> #include<string> using namespace std; int main(){ char *name[3]={"Tom","Neo","Marry"}; int count[3]={0,0,0}; int i,j,k=0; bool tag=1; cout<<"please input the name of the leader : Tom Neo Marry\n\n"; char leadername[20]; for(i=0;i<10;i++){ cout<<"input name "<<i+1<<" :"; cin>>leadername; for(j=0;j<3;j++){ if(strcmp(leadername,name[j])==0){ count[j]++; tag=0; } } if(tag==1)k++; tag=1; } cout<<endl; for(i=0;i<3;i++){ cout<<name[i]<<":"<<count[i]<<endl; } cout<<"Abandoned tickets:"<<k<<endl; return 0; }
或者
#include<iostream> #include<string> using namespace std; int main(){ string name[3]={"Tom","Neo","Marry"}; int count[3]={0,0,0}; int i,j,k=0; bool tag=1; cout<<"please input the name of the leader : Tom Neo Marry\n\n"; string leadername; for(i=0;i<10;i++){ cout<<"input name "<<i+1<<" :"; cin>>leadername; for(j=0;j<3;j++){ if(leadername==name[j]){ count[j]++; tag=0; } } if(tag==1)k++; tag=1; } cout<<endl; for(i=0;i<3;i++){ cout<<name[i]<<":"<<count[i]<<endl; } cout<<"Abandoned tickets:"<<k<<endl; return 0; }
但是,相比较使用结构体的方法,我们对于候选人和票数的关系,更加直观,联系更加明显。