0

我有一个学生向量,每个元素都包含 ID 和测试答案。

ABCTFTFTF(ABC = ID,TFTFTF = 答案)

我正在尝试仅检索 TFTFTF 块并将它们与包含正确答案字符串的字符串进行比较。

我理解它必须是:

  • 学生[我]

  • 创建子字符串(答案开始 = 位置 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

(白色字符 = 没有给出答案)

* 编辑答案

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;
        }
    }
4

1 回答 1

2

假设:

  • 所有 ID 都是唯一的
  • 每个 ID 都与一串答案相关联。

这听起来像是字典的工作。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循环并可能从文件等中读取数据,但我希望这能让您朝着正确的方向前进。

于 2012-07-20T22:51:50.160 回答