【问题描述】编程统计候选人的得票数。设计有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;
}