0

私は学生のベクトルを持っています、各要素は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;
        }
    }
4

1 に答える 1

2

仮定:

  • すべてのIDは一意です
  • 各IDは、1つの回答文字列に関連付けられています。

それは辞書の仕事のように聞こえます。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 に答える