zoukankan      html  css  js  c++  java
  • 结构体数组(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
    
    ";
        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
    
    ";
    	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
    
    ";
    	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;
    }


    但是,相比较使用结构体的方法,我们对于候选人和票数的关系,更加直观,联系更加明显。



  • 相关阅读:
    noip2018练习总结
    东方CannonBall (概率DP)
    数论
    逆序对
    USACO5.3 校园网Network of Schools(Tarjan缩点)
    USACO09FEB 改造路Revamping Trails(分层图模板)
    Comet OJ模拟赛 Day1
    Tarjan模板
    NOIP 天天爱跑步(树上差分)
    树上差分
  • 原文地址:https://www.cnblogs.com/pangblog/p/3253513.html
Copyright © 2011-2022 走看看