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

C++ Comparing vector elements to determine correct answer

本文关键字:答案 元素 比较 C++      更新时间:2023-10-16

我已经为此斗争了一段时间。我试图从两个向量创建一个分数结果,一个向量是实际答案,另一个是输入的答案。本质比较:

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);
    }

我不太明白如何将这些元素相互比较,以返回有多少是相同的(正确答案)。

最初,我尝试不使用第二个向量,并通过以下操作将第二个输入的字符串与问题向量进行比较:

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

但是compare语句一直导致程序崩溃。经过一点研究,我得出的结论是,我无法使用[]来比较向量,所以我决定创建一个向量来比较2…,但没有结果。

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

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

你可以这样做

#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方法

使用std::find函数,例如,假设答案是正确答案的向量,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中,您忘记了分号。使用分数++;而不是score=score+1。访问索引N处大小为N的矢量会导致程序崩溃,因为索引从0 开始