在字符串向量中查找部分字符串

Find Partial String in String Vector

本文关键字:字符串 查找部 向量      更新时间:2023-10-16

我有一个学生向量,每个元素都由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

(白色字符=未给出答案)

*编辑答案

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

假设:

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

这听起来像是字典的工作。C++STL提供了一个方便的CCD_ 1。

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,strcmp中的老派C函数所做的)

然后使用功能:

cout << "Student1 has " 
     << compareAnswer(answerKey, studentAnswers["student1"])
     << " errors" << endl;

当然,您可能会使用for循环,并可能从文件中读取数据,等等,但我希望这能让您朝着正确的方向前进。