write a program to grade a multiple-choice exam. The exam has 20 questions, each answered with a letter in the range of ‘a’ through ‘f’.
The program should read the key from input, then read each answer and output the ID number and score. Erroneous input should result in a error message.
Input
The first line of input is the key, consisting of a string of 20 characters.
The remaining lines are exam answers, each of which consists of a student ID number, a space, and a string of characters.
The input ends with 0.
Output
Output the score for each ID number in a sigle line, consisting the ID number, a space, and the score or error message.
Sample Input
Copy sample input to clipboard
abcdefabcdefabcdefab
1234567 abcdefabcdefabcdefab
9876543 abddefbbbdefcbcdefac
5554446 abcdefabcdefabcdef
4445556 abcdefabcdefabcdefabcd
3332221 abcdefghijklmnopqrst
0
Sample Output
1234567 20
9876543 15
5554446 Too few answers
4445556 Too many answers
3332221 Invalid answers
PHP中文网2017-04-17 14:54:10
#include
#include <ベクトル>
#include <文字列>
名前空間 std を使用します。
bool isAnswerValid(文字列 ans)
{
if(ans.length()<20) {
コート << 「回答が少なすぎます」 <<終わり;
false を返します。
}
else if(ans.length() > 20) {
コート << 「回答が多すぎます」 <<終わり;
false を返します。
}
for(auto i=ans.begin(); i!=ans.end(); i++)
if( (char)*i<'a' || (char)*i>'f') {
コート << 「無効な回答」 <<終わり;
false を返します。
}
true を返します。
}
int howManyRightAnswer(string ans, string stu)
{
整数 = 0;
if(isAnswerValid(stu)==true) {
auto i = ans.begin();
auto j = stu.begin();
while(i!=ans.end()) {
if( *i == *j)
val++;
i++;
j++;
}
戻り値;
}
それ以外
-1 を返します。
}
int main(void)
{
文字列 ans、stu;
int sid、リグナム;
シン>>回答;
if (isAnswerValid(ans)==true) {
scanf("%d", &sid);
while(sid!=0) {
シン>>スチュ。
コート <<シド;
リグナム = howManyRightAnswer(ans,stu);
if(リグナム!=-1)
printf(" %d\n", リグナム);
scanf("%d", &sid);
}
}
}
VC++2010 テストはありません。