-4

ファイル内の行を削除したいのですが、これが私のコードです。機能しませんが、長い間注意深くチェックしても理由が​​わかりません。

/* A function to delete the pointed record. */

void S_O::delete_record (const string &id) {

  /* Read all records in a vector. */
  Temp_Info();

  /* Find the excat record. */
  vector<string>::iterator iter = std::find (temp_info.begin(), temp_info.end(), id);
  /* If find, then delete it. */
  if (iter != temp_info.end())
    temp_info.erase(iter);

  /* Re-input the records in file. */
  ofstream file;

  file.open ("StudentInfo");

  if (!file) {
      cerr << "error: unable to open input file: "
           << "file" <<endl;
  }
  for (size_t i = 0; i != temp_info.size(); i++)
    file << temp_info[i] << endl;

  /* Clear the vector. */
  temp_info.erase (temp_info.begin(), temp_info.end());

}

サンプルファイルは次のとおりです。

姓名(Name) 学号(Id) 性别(Sex) 成绩(Score)
黄佳敏       1         女         100
李佳惠       2         女         100

関数は次のとおりです。 inline void S_O::Temp_Info() {

  /* Create a stream and a file. */
  ifstream afile ("StudentInfo");

  /* Test if the file is opened successfully. */
  if (afile.is_open()) {
    while (afile.good()) {
      string line;

      /* To read file line to line. */
      while (getline(afile, line)) {
        /* To put lines into a vector. */
        temp_info.push_back(line);
      }
    }

    /* Close the stream and save the file. */
    afile.close();
  }
}

ここで何が問題なのですか?

4

3 に答える 3

0

文字列から ID を取得するには、独自の検索関数を実装する必要があります。これは、文字列全体を読み取って保存すると、ID が文字列の途中にあるためです。

各行のすべての情報を含むデータ構造を持つようにして、id へのアクセスが見つけやすくなるようにします

于 2013-06-13T13:09:26.230 に答える
0

便利な stl の find_if があります

http://www.cplusplus.com/reference/algorithm/find_if/

完全な文字列が与えられ、2 番目の列である学生 ID があり、stringtokenizer を使用して 2 番目の列を取得し、それを学生 ID と比較して true または false を返すことができます

于 2013-06-13T13:10:35.360 に答える