统计候选人得票(结构体)

36 篇文章 1 订阅

【问题描述】编程统计候选人的得票数。设计有3个候选人zhang,li,wang,且不区分大小写,10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人选民,则按废票处理。选民投票结束后程序自动显示各候选人的得票结果和废票信息。要求用结构体数组candidate表示3个候选人的姓名和得票结果。

【样例输入】

zhang

li

wang

Wang

Li

Zhang

zhang

ZHANG

deng

Deng

【样例输出】

zhang 4

li 2

wang 2

Error 2

【提示】

struct Candidate{

    char name[20];

    int num;

}candidate[3]

//候选人投票9.1 

#include<iostream>
#include<cstring>
#include<ctype.h>
using namespace std; 

struct Candidate{

  char name[20];

  int num;

};
int main()
{
    struct Candidate candidate[3]={{"zhang",0},{"li",0},{"deng",0}};///结构体数组赋值 重新定义数组 
	int error=0;
	char nam[20][10];
	for(int i=0;i<10;i++)
	cin>>nam[i];
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<strlen(nam[i]);j++)
		   nam[i][j]=tolower(nam[i][j]);    //good!!!把所有字母转化为小写不需要挨个判断 
	}
	for(int i=0;i<10;i++)
	{
		if(strcmp(nam[i],"zhang")==0)c语言中字符串的比较 
		 candidate[0].num++;
		else if(strcmp(nam[i],"li")==0)
		 candidate[1].num++;
		else if(strcmp(nam[i],"deng")==0)
		 candidate[2].num++;
		else
		 error++;
	}
	for(int i=0;i<3;i++)
	{
		cout<<candidate[i].name<<" "<<candidate[i].num<<endl;
	}
	cout<<"error "<<error;
	return 0;
	
	
}

;::相比之下下面的代码要麻烦的多

#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;

struct Candidate{

    char name[20];

    int num;
};
struct Candidate candidate[3]={{"wang",0},{"li",0},{"zhang",0}};

int main()
{
    int error=0;
    char isname[10];
    for(int i=0;i<10;i++)
    {
        scanf("%s",isname);
        switch(isname[0])
           {
           case 'w':
           case 'W':
               if((isname[1]=='a'||isname[1]=='A')&&((isname[2]=='n'||isname[2]=='N')&&((isname[3]=='g'||isname[3]=='G')&&isname[4]==0))&&isname[4]==0)
                  {
                      candidate[0].num++;break;}
               else{error++;break;}
           case 'L':
           case 'l':
                if((isname[1]=='i'||isname[1]=='I')&&isname[2]==0)
                   {

                   candidate[1].num++;break;}
                 else {error++;break;}
           case 'z':
           case 'Z':
                if(((isname[1]=='h')||isname[1]=='H')&&(isname[2]=='a'||isname[2]=='A')&&(isname[3]=='N'||isname[3]=='n')&&(isname[4]=='g'||isname[4]=='G')&&isname[5]==0)
                    {candidate[2].num++;break;}
                else
                    {error++;break;}
            default: error++;break;


        }}
        for(int i=2;i>=0;i--)
          {printf("%s %d\n",candidate[i].name,candidate[i].num);}
        printf("Error %d",error);


return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值