0

このiStream関数を使用して、次の形式のデータの.txtファイルを読み込みます。

  Pink Floyd: Dark Side of the Moon
  0:01:30 - Speak to Me

私の機能はほぼ完璧に機能します。

これが私が理解できない私の問題です。1)各トラックがアルバムに追加されるときに印刷(出力)します(したがってx、最初のアルバムのコピーを印刷し、それぞれに次のトラックが添付されます。2)新しいアルバムが作成されると、前のアルバムの古いトラックが保持され、それらを1つずつ追加し続けます。(したがって、最終アルバムには、すべてのアルバムのすべてのトラックが含まれます)

もちろん、各アルバムを1回だけ印刷し、各アルバムに独自の曲だけを含めるようにしたいのですが...何か助けていただければ幸いです。ありがとう。

4

2 に答える 2

1

コードに多くの問題があります。

stringstream stringstreamFirst(line);

変数を使用しておらずstringstreamFirstlineこの時点では空です。

Album anAlbum(artistName,albumTitle,trackVector);

この回線には多くの問題があります。

  • 間違った値を使用しています。
    最初の行の1つartistName、、、albumTitleおよびTrackVectorは空です。最終的に新しいアルバムに出くわしたとき、、、artistNameおよびalbumTitleTrackVector前のアルバムのものであり、現在のアルバムのものではありません。値は、アルバムのトラックに到達するまでに正しいですが、新しいアルバムオブジェクトを作成する場合はそうではありません。
  • それは間違った場所にあります。
    配置されると、このステートメントはAlbum入力ファイルの各行にオブジェクトを作成します。新しいアルバムオブジェクトを作成する適切な場所は、入力ファイルで新しいアルバムエントリに遭遇したときです。

stringstream stringstreamNew(line);
stringstream stringstreamNewNew(line);

なぜ複雑な名前で、なぜ2つの変数が必要なのですか?別の方法は、ループstringstreamの最初の行として作成された1つだけを使用することです。while

if(!(line [8] =='-'))
else if(line [8] =='-')

このようにブール条件を複製しないでください。あなたが意味するならelse(それはあなたが意味することです)、ただ使用してelseください。この行は、アルバムエントリまたはトラックエントリのいずれかです。他には何もありません。

else//これらの行がありません

エラー処理はありません。おそらくアルバムエントリであるはずのもの、またはおそらくトラックエントリであるはずのものを解析できない場合はどうなりますか?

あなたがする必要があること(擬似コード):

while (getline(istr, line)) {
   stringstream linestream (line);
   if (line looks like an album line) {
      if (not the first line in the file) {
          // Create an album using the artist name, album title, and track vector
          // and add this album onto the vector of albums
      }
      // Parse the line for artist name and album title, preferably handling errors
      // Clear the trackVector that now pertains to the previous album
   }
   else {
      // Parse the line for track duration and name, preferably handling errors
      // Add the track to the track vector.
   }
}
// Create an album to cover the last album plus set of tracks
于 2012-12-11T13:32:42.233 に答える
0

Albumおそらくコンストラクター引数への参照(またはポインター)を格納しますか ?

そうしないでください。つまり、アルバム間で共有されるトラックのベクトルは1つだけでありtrackVector、これはアルバム間で共有され、追加され続けます。

を変更可能にすることが理にかなっているかどうかに応じて、すべてのトラックを読み取るまで、addTrackメンバーを含めるか、Album 作成しない必要があります。AlbumAlbum

また、変更することはありませんaC-そして何artistName = artistNameを達成することを期待していますか?

于 2012-12-11T13:15:19.997 に答える