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;
}
我假设您将答案存储为字符串。
你需要记住的事情是
- 要从 0 开始索引,这是使用运算符 [] 在向量中访问它们的方式。你的循环中不需要
<=
并且它不会崩溃,因为你不会超出你的向量一个。
- 要比较循环中的字符串,您可以使用字符串的
compare
方法或老式的 strcmp
.
我为此苦恼了一段时间。我正在尝试从 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;
}
我假设您将答案存储为字符串。
你需要记住的事情是
- 要从 0 开始索引,这是使用运算符 [] 在向量中访问它们的方式。你的循环中不需要
<=
并且它不会崩溃,因为你不会超出你的向量一个。 - 要比较循环中的字符串,您可以使用字符串的
compare
方法或老式的strcmp
.