如何使用c++通过答案集检查答案
How to check answers through an answer set using c++?
我是c++初学者。我只想检查学生对一组答案键的回答。比方说,我有一个学生,是这样申报的:
//Declare and array of student answers;
string student1 [] = {"A", "B", "C", "A", "B","C","A","B","A","A"};
答案键是这样声明的:
//Declare an array set of answer key
string keys [] = {"A", "B", "C", "A", "B","C","A","B","A","A"};
想象一下,答案键是1-10中问题的正确答案。然后我想检查学生的答案是否与声明的答案密钥匹配:
for(const string &key : keys){
for(const string &answer : answers){
if(key == answer){
cout << "Correct" << endl;
}else{
cout << "Wrong" << endl;
}
}
}
我的第一个问题是,它给了我以下结果:
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
Correct
第二个问题是,我想再增加5名学生来检查他们的答案。谢谢
试着让它成为一个循环:
for(int i = 0;i < 10;i++)
{
if (student1[i] == keys[i])
{
cout << "Correct" << endl;
}
else
{
cout << "Wrong" << endl;
}
}
对于第二个,只需制作一组学生:
string students[5][10] = {{...},{...},{...},{...},{...}};
添加新循环:
for (int j = 0; j < 5; j++)
并更改if语句:
if (students[j][i] == keys[i])
我希望你能理解。
让我先检查一下您想要的是什么。你有一组学生和一组正确答案的测试。每个学生都有一个具体的答案列表。你只想把学生的答案与关键答案或正确答案进行比较。
让我们从你的例子中的student1开始。我们有十个问题,学生1的所有答案都是正确的,那么为什么你的代码显示了十多行呢?
你做了两个for循环,而你只需要一个。
你可以这样进行:
for (int i=0;i<10;i++) {
if (student1[i] == keys[i]) {
std::cout << "Correct " <<student1[i]<<" "<< keys[i]<< std::endl;
}else std::cout<< "Wrong" <<std::endl;
}
您只需将第一个数组(student1(中的答案i与第二个数组(keys(中相同位置i的关键答案进行比较。除非我理解了错误的地方,否则你不需要做两个for循环。
对于你的第二个问题,这是一个模糊的问题。根据您当前在C/C++中的级别,您将有许多。
如果你想增加更多的学生,你可以简单地申报更多学生们喜欢你对学生做的事情1:
std::string student1[] = { "A", "B", "C", "A", "B","C","A","B","A","A" };
std::string student2[] = { "A", "B", "C", "A", "C","C","A","B","A","A" };
std::string student3[] = { "A", "B", "C", "A", "C","C","A","B","A","A" };
//...
然后,您可以将数组定义为学生列表。
string list[3][10] = {student1,student2,student3};
这是一个测试三名学生成绩的代码:
#include <iostream>
#include <string>
#include<vector>
using namespace std;
void showResult(const string student1[],const string keys[]){
for (int i=0;i<10;i++) {
if (student1[i] == keys[i]) {
std::cout << "Correct " << std::endl;
}else std::cout<< "Wrong" <<std::endl;
}
}
int main(int argc, char** argv) {
std::string student1[] = { "A", "B", "C", "A", "B","C","A","B","A","A" };
std::string student2[] = { "A", "B", "C", "A", "C","C","A","B","A","A" };
std::string student3[] = { "A", "B", "C", "A", "C","C","A","B","A","A" };
string list[3][10] = {student1,student2,student3};
std::string keys[] = { "A", "B", "C", "A", "B","C","A","B","A","A" };
for(int i=0;i<3;i++){
cout<<"student "<<i+1<<endl;
for(int j=0;j<10;j++) cout<<list[i][j]<<" ";
cout<<endl;
showResult(list[i],keys);
cout<<endl;
}
return 0;
}
否则,如果您想要更动态的东西,您应该尝试std::vector中的Vectors。C++中的矢量比传统的数组更加通用。你可以在这个线程中阅读更多关于这个主题的内容:
多值的c++数组赋值
你可以用for循环来实现这一点,其他人已经展示了这一点。但你也可以用std::transform和lambda来实现,只是为了好玩。
#include <algorithm>
[...]
std::vector<string> correctness;
std::transform(student1,student1+10,keys,std::back_inserter(v),[](const string& a,const string& b){if (a==b) return "Correct"; else return "Wrong";});
for (const auto& ans : correctness) std::cout << ans << endl;
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 欧拉项目#8答案是大以获得有效答案
- 试图让变量检查数组中的某些内容
- 首要问题的答案让值班员搞错了
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- 如何使用c++通过答案集检查答案
- 尝试检查输入的文本与我自己的自定义答案
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- 我们如何找到 N sqrt(m) 并检查答案是否是 C++ 中的整数
- 为什么当我尝试检查字段的值时,我得到一个奇怪的答案
- 检查类是否派生自特定类(编译,运行时两个答案都可用)
- C++正在检查用户是否输入了有效答案
- 检查字符每次返回相同的答案