首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用c++检查答案集?

如何使用c++检查答案集?
EN

Stack Overflow用户
提问于 2019-11-03 00:38:59
回答 3查看 689关注 0票数 0

我是一个c++初学者。我只想检查学生对一组答案的答案。假设我有一个学生,并像这样声明:

代码语言:javascript
复制
//Declare and array of student answers;
string student1 [] = {"A", "B", "C", "A", "B","C","A","B","A","A"};

答案关键字声明如下:

代码语言:javascript
复制
//Declare an array set of answer key
string keys [] = {"A", "B", "C", "A", "B","C","A","B","A","A"};

假设答案是从1到10的正确答案。然后我想检查学生的答案是否与声明的答案匹配:

代码语言:javascript
复制
for(const string &key : keys){
    for(const string &answer : answers){
        if(key == answer){
            cout << "Correct" << endl;
        }else{
            cout << "Wrong" << endl;
        }
    }
}

我的第一个问题是,它给了我以下结果:

代码语言:javascript
复制
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个学生来检查他们的答案。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-11-03 01:24:47

试着把它变成一个循环:

代码语言:javascript
复制
for(int i = 0;i < 10;i++)
    {
        if (student1[i] == keys[i])
        {
            cout << "Correct" << endl;
        }
        else
        {
            cout << "Wrong" << endl;
        }
    }

对于第二个,只需创建一个学生数组:

代码语言:javascript
复制
string students[5][10] = {{...},{...},{...},{...},{...}};

添加新循环:

代码语言:javascript
复制
for (int j = 0; j < 5; j++)

并更改if语句:

代码语言:javascript
复制
if (students[j][i] == keys[i])

我希望你能理解。

票数 3
EN

Stack Overflow用户

发布于 2019-11-03 01:41:35

让我先检查一下你想要的东西是否正确。你有一组学生和一组正确答案的测试。每个学生都有一个特定的答案列表。你所要做的就是将学生的答案与关键答案或正确答案进行比较。

让我们从示例中的student1开始。我们有十个问题,student1的所有答案都是正确的,那么为什么你的代码显示了十多行呢?

您创建了两个for循环,而您只需要一个。

你可以这样做:

代码语言:javascript
复制
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;

    }

您只需将第一个数组中的答案i (student1)与第二个数组中相同位置i的键答案(键)进行比较。您不需要创建两个for循环,除非我确实理解了一些错误。

关于你的第二个问题,这是一个模糊的问题。根据你当前的C/C++水平,你会有很多这样的代码。

如果你想添加更多的学生,你可以简单地声明更多的学生,就像你对student1所做的那样:

代码语言:javascript
复制
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" };
//...

然后,您可以将数组数组定义为学生列表。

代码语言:javascript
复制
string list[3][10] = {student1,student2,student3};

这是一段代码,测试了三个学生的结果:

代码语言:javascript
复制
#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++ array assignment of multiple values

票数 1
EN

Stack Overflow用户

发布于 2019-11-03 04:27:58

您可以使用for循环来实现这一点,其他人已经展示了这一点,但是您也可以使用std::transform和lambda来实现这一点,只是为了好玩。

代码语言:javascript
复制
#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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58673099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档