题目描述:
请实现接口:
unsigned int AddCandidate (char* pCandidateName);
功能:设置候选人姓名输入: char* pCandidateName 候选人姓名
输出:无
返回:输入值非法返回0,已经添加过返回0 ,添加成功返回1
Void Vote(char* pCandidateName);
功能:投票
输入: char* pCandidateName 候选人姓名
输出:无
返回:无
unsigned int GetVoteResult (char* pCandidateName);
功能:获取候选人的票数。如果传入为空指针,返回无效的票数,同时说明本次投票活动结束,释放资源
输入: char* pCandidateName 候选人姓名。当输入一个空指针时,返回无效的票数
输出:无
返回:该候选人获取的票数
void Clear()
// 功能:清除投票结果,释放所有资源
// 输入:
// 输出:无
// 返回
知识点: 查找
输入:
候选人的人数
候选人的名字
投票人的人数
投票
输出:
每行输出候选人的名字和得票数量。
样例输入:
4
A B C D
8
A B C D E F G H
样例输出:
A : 1
B : 1
C : 1
D : 1
Invalid : 4
思路:值得注意的是,输入输出的格式问题;候选人人名重复时,只计数第一个出现的名字,如下:
3 a a c
4 a a b c
a : 2
a : 0
c : 1
Invalid : 1
代码:
#include <iostream>
#include <string>
using namespace std;
struct Cand
{
string name;
int count;
}cand[100];
static int invalid; // 记录无效投票数
unsigned int AddCandidate(string pCandidateName)
{
int i;
for (i = 0; i<100; i++)
if (cand[i].name == "")
{
cand[i].name = pCandidateName;
return 1;
}
else
if (cand[i].name == pCandidateName)
return 0;
return 0;
}
void Vote(string pCandidateName)
{
int i;
for (i = 0; i<100; i++)
if (pCandidateName == cand[i].name)
{
cand[i].count++;
break;
}
if (i == 100)
invalid++;
}
int main()
{
int candNum, voterNum; // 候选人的人数
cin >> candNum;
int i, j = 0;
for (i = 0; i<100; i++) // 初始化结构体
{
cand[i].name = "";
cand[i].count = 0;
}
string pCandidateName, pVoterName;
for (i = 0;; i++) // 输入候选人的名字
{
cin >> pCandidateName;
if (AddCandidate(pCandidateName))
{ // cout << pCandidateName << " Insert success..." << endl;
j++;
}
// else cout << pCandidateName << " has bean inserted, try again..." << endl;
if (j == candNum)
break;
}
cin >> voterNum; // 输入投票人的人数
for (i = 0; i<voterNum; i++) // 输入投票
{
cin >> pVoterName;
Vote(pVoterName);
}
for (i = 0; i<candNum; i++) // 输出候选人的名字和得票数量
cout << cand[i].name << " : " << cand[i].count << endl;
cout << "Invalid" << " : " << invalid;
return 0;
}
或
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct vote{
string name;
int num;
};
vector<vote> save; //创建动态数组save,数据类型是结构体vote
int main()
{
int peopcount = 0; // 候选人人数
int votecount = 0, eff = 0; // votecount投票人人数,eff有效投票数
cin >> peopcount;
string name;
for (int i = 0; i<peopcount; i++) // 输入候选人人数和人名
{
cin >> name;
vote temp;
temp.name = name;
temp.num = 0;
save.push_back(temp);
}
cin >> votecount;
for (int i = 0; i<votecount; i++) // 输入投票人人数和投票人名
{
cin >> name;
for (int j = 0; j<peopcount; j++)
{
if (save[j].name == name)
{
save[j].num++;
eff++;
break;
}
}
}
for (int i = 0; i<peopcount; i++) // 输出投票结果
{
cout << save[i].name << " : " << save[i].num << endl;
}
cout << "Invalid : " << votecount - eff<<endl;
// system("pause");
return 0;
}