我一直在与此斗争。我试图从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是字符串变量。
答案 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;
}
我假设您将答案存储为字符串。
你需要记住的事情是
<=
,它不会崩溃,因为你不会超过你的向量。compare
方法或旧的strcmp
。答案 2 :(得分:0)
你的for循环没有遍历整个向量。指数从0开始,并使用&lt;相反&lt; =。在示例2中,您忘记了分号。使用得分++;而不是得分=得分+ 1。在索引N处访问大小为N的向量会导致程序崩溃,因为索引从0开始