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;
}

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

结构体数组(C++)的更多相关文章

  1. C#调用C/C++动态库 封送结构体,结构体数组

    一. 结构体的传递 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int ...

  2. 【C语言入门教程】7.2 结构体数组的定义和引用

    7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...

  3. Delphi结构体数组指针的问题

    //这段代码在Delphi 2007和delphi 7下是可以执行的,所以正确使用结构体数组和指针应该是这样的,已验证 unit Unit1; interface uses Windows, Mess ...

  4. C语言中的结构体,结构体数组

    C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...

  5. c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组

    一.结构体的写入和读取 //写入结构体 FILE *fp = fopen("/Users/ios/Desktop/1.data", "w"); if (fp) ...

  6. c语言结构体数组定义的三种方式

    struct dangdang { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; int dangdang;//成员名可以和类名同名 }ddd[];/ ...

  7. C#调用C++DLL传递结构体数组的终极解决方案

    在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型 ...

  8. 绝对好文C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文  http://blog.csdn.net/xxdddail/art ...

  9. C#调用C/C++动态库 封送结构体,结构体数组

    因为实验室图像处理的算法都是在OpenCV下写的,还有就是导航的算法也是用C++写的,然后界面部分要求在C#下写,所以不管是Socket通信,还是调用OpenCV的DLL模块,都设计到了C#和C++数 ...

随机推荐

  1. POJ 3264 Balanced Lineup(RMQ)

    点我看题目 题意 :N头奶牛,Q次询问,然后给你每一头奶牛的身高,每一次询问都给你两个数,x y,代表着从x位置上的奶牛到y位置上的奶牛身高最高的和最矮的相差多少. 思路 : 刚好符合RMQ的那个求区 ...

  2. Oracle11g密码区分大小写导致database link无法连接

    http://f.dataguru.cn/thread-128013-1-1.html Oracle11g的密码默认是区分大小写的,该特性通过初始化参数sec_case_sensitive_logon ...

  3. php数组遍历 使用while循环

    while() 通常和 list(),each()配合使用. $colors= array('red','blue','green','yellow'); while(list($key,$val)= ...

  4. c#中的delegate(委托)和event(事件)

    c#中的delegate(委托)和event(事件) 一.delegate是什么东西? 完全可以把delegate理解成C中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能 ...

  5. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-005-定义切面使用@Aspect、@EnableAspectJAutoProxy、<aop:aspectj-autoproxy>

    一. 假设有如下情况,有一个演凑者和一批观众,要实现在演凑者的演凑方法前织入观众的"坐下"."关手机方法",在演凑结束后,如果成功,则织入观众"鼓掌& ...

  6. Introducing RecyclerView(二)

    文/poberWong(简书作者)原文链接:http://www.jianshu.com/p/7fdfea845937著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 正文: Recyc ...

  7. Android中改变dialog的显示的位置和大小

    private void setDialogSize(Dialog dg) { Window dialogWindow = dg.getWindow(); WindowManager.LayoutPa ...

  8. VC C运行时库(CRTL)的几个版本及选用

    分类: Windows 2008-12-23 10:01 987人阅读 评论(0) 收藏 举报ciostreammfclibrary多线程import最近做项目碰到了一个关于在动态库中使用MFC以及在 ...

  9. hihocoder #1289 : 403 Forbidden (2016 微软编程笔试第二题)

    #1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Sometimes ...

  10. ☀【组件】加载 load

    Bear / js / utils / load.js 动态修改script标签中的src属性存在的问题 javascript创建css.js,onload触发callback兼容主流浏览器的实现 各 ...