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

时间:2012-07-20 22:37:45

标签: c++

我有一个学生矢量,每个元素都包含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;
        }
    }

1 个答案:

答案 0 :(得分: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循环并且可能从文件等中读取数据,但我希望能让你朝着正确的方向前进。