C++比较矢量元素以确定正确答案
C++ Comparing vector elements to determine correct answer
我已经为此斗争了一段时间。我试图从两个向量创建一个分数结果,一个向量是实际答案,另一个是输入的答案。本质比较:
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;
}
我假设你将答案存储为字符串。
你需要记住的是
- 要从0开始索引,以下是使用运算符[]在向量中访问索引的方式。你的循环中不需要
<=
,它也不会崩溃,因为你不会超过向量一 - 要比较循环中的字符串,可以使用字符串的
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 开始
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 欧拉项目#8答案是大以获得有效答案
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 首要问题的答案让值班员搞错了
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 通过 getter 访问列表的元素与直接访问类成员给出了不同的答案