C++ 比较向量元素以确定正确答案

C++ Comparing vector elements to determine correct answer

我为此苦恼了一段时间。我正在尝试从 2 个向量创建分数结果,1 个向量是实际答案,另一个是输入的答案。 本质上比较:

for (i=1;i<=totalQ;i++){
cout<<"Enter question answer: ";
cin>>inputQ;
questions.push_back(inputQ);
}

对此:

for (i=1;i<=totalQ;i++){
    cout<<"Enter your answer: ";
    cin>>studentA;
    answers.push_back(studentA);
    }

我不太明白如何将元素相互比较以 return 有多少相同(正确答案)。

最初我尝试不使用第二个向量,而是通过这样做将第二个输入的字符串与问题向量进行比较:

for (i=1;i<=totalQ;i++){
    cout<<"Enter your answer: ";
    cin>>studentA;
       if(studentA == questions[i]){
          score=score+1}
    }

但是比较语句一直导致程序崩溃。经过一番研究后,我得出的结论是我无法使用 [] 比较矢量,所以我决定创建一个矢量来比较 2... 还没有成功。

我如何比较这 2 个向量以提供匹配元素和索引的数量,或者我如何比较输入与向量元素。

两个向量都是字符串向量,studentA 是一个字符串变量。

使用std::find函数,假设answers是正确答案的向量,answer是输入的答案:

if( std::find(answers.begin(), answers.end(), answer) != answers.end() ) {
      score+=1;
}

顺便说一下,您的程序崩溃是因为您的索引从 1 开始并以大小结束:

for (i=1;i<=totalQ;i++){

在C++中向量索引从0开始,所以你应该是:

for (i=0;i<totalQ;i++){

您的 for 循环没有遍历整个向量。索引从 0 开始,使用 < 而不是 <= 。在示例 2 中,您忘记了分号。使用分数++;而不是分数 = 分数 + 1。在索引 N 处访问大小为 N 的向量会导致程序崩溃,因为索引从 0

开始

你可以这样做

#include <vector>
#include <iostream>
#include <string>
//#include <cstring>

using namespace std;

int main(int, char**)
{
    int i;
    int score = 0;
    int totalQ = 3;

    vector<string> questions;
    vector<string> answers;

    for (i=0;i<totalQ;i++)
    {
        string inputQ;
        cout<<"Enter question answer: ";
        cin>>inputQ;
        questions.push_back(inputQ);
    }

    for (i=0;i<totalQ;i++)
    {
        string studentA;
        cout<<"Enter your answer: ";
        cin>>studentA;
        answers.push_back(studentA);
    }

    for (i=0;i<totalQ;i++)
    {
        //if(strcmp(answers[i].c_str(), questions[i].c_str()) == 0)
        if(answers[i].compare(questions[i]) == 0)
        {
            score++;
        }
    }

    cout << "You got " << score<< " correct" << endl;
}

我假设您将答案存储为字符串。

你需要记住的事情是

  1. 要从 0 开始索引,这是使用运算符 [] 在向量中访问它们的方式。你的循环中不需要 <= 并且它不会崩溃,因为你不会超出你的向量一个。
  2. 要比较循环中的字符串,您可以使用字符串的 compare 方法或老式的 strcmp.