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

时间:2015-02-19 00:24:40

标签: c++ vector string-comparison

我一直在与此斗争。我试图从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);
    }

我无法弄清楚如何相互比较元素以返回相同的数量(正确的答案)。

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

顺便说一句,你的程序崩溃了,因为你的索引从1开始并以size:

结束
for (i=1;i<=totalQ;i++){
C ++向量索引中的

从0开始,所以它应该是:

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

答案 1 :(得分:1)

你可以这样做

#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开始索引,这是使用operator []在向量中访问它们的方式。你不需要你的循环中的<=,它不会崩溃,因为你不会超过你的向量。
  2. 要比较循环中的字符串,您可以使用字符串的compare方法或旧的strcmp

答案 2 :(得分:0)

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