我有一个学生矢量,每个元素都包含ID和测试答案。
ABCTFTFTF(ABC = ID,TFTFTF =答案)
我试图只检索TFTFTF的块,并将它们与包含正确答案字符串的字符串进行比较。
我明白一定是:
学生[I]
创建子串(答案的开头=位置10,在第30位结束)
比较子字符串
采取行动比较
但我在语法上真的很挣扎,有人能指出我正确的方向吗?
尝试:
void getResults()
{
string found;
for(int i = 0; i < 150; i++)
{
found = students[i].find(answers);
if(found == answers)
{
cout << "Student: " << i << "Passed" << endl;
}
else
{
cout << "Student: " << i << "Failed" << endl;
}
}
}
个人项目 - 不是家庭作业
我正在关注每日c ++项目主题:
http://www.cplusplus.com/forum/beginner/75558/
模拟数据:
OMXIZGWA TTFTFTFFTFTTFFFTTFTF
XKVNYUVZ F FTFFFFFT TFFTTTFFF
GGVDSSTQ TFFFTF FTTF TF TFFT
XPYDXVIQ FFTTFT FTFT TFFTTTFT
XVFUMFZL TTFFTFFTFFTFF FFTFFT
(白色char =没有回答)
*编辑答案
void getResults()
{
string found;
string foundSubString;
for(int i = 0; i < 150; i++)
{
found = students[i];
foundSubString = found.substr (9,20);
if(foundSubString == answers)
{
cout << "Student: " << i << "Passed" << endl;
}
else
{
cout << "Student: " << i << "Failed" << endl;
}
}
答案 0 :(得分:2)
假设:
这听起来像是字典的工作。 C ++ STL提供了方便的std::map
。
std::string answerKey = "TTFFTF"
std::map<std::string, std::string> studentAnswers;
studentAnswers["student1"] = "TFTTTF";
studentAnswers["student2"] = "FFTFTF";
// more students....
现在您已经定义了数据,您可以定义比较功能。假设您要查找错误数,可以定义这样的原型:
int compareAnswer(const std::string& correctAnswer, const std::string& valiantAttempt);
(注意:方便的是,这实际上正是string.h中的老派C函数,strcmp
所做的)
然后使用函数:
cout << "Student1 has "
<< compareAnswer(answerKey, studentAnswers["student1"])
<< " errors" << endl;
当然你会使用for
循环并且可能从文件等中读取数据,但我希望能让你朝着正确的方向前进。