1

このコードのスライスでは、次の出力が得られます

bbb 55 66 77 88
aaa

私が期待し、望む出力は

bbb 55 66 77 88
bbb

ssからに再割り当てするlog[0]ためlog[1]です。だから私の質問は、なぜ出力が私が期待したものと異なるのか、そしてどうすればそれを私が望むものに変えることができるのですか?

      int w,x,y,z;
      stringstream ss (stringstream::in | stringstream::out);
      string word;
      string log[2];
      log[0]="aaa 11 22 33 44";
      log[1]="bbb 55 66 77 88";

      ss<<log[0];
      ss>>word;

      int k=0;
      ss>>w>>x>>y>>z;
      k++;

      ss<<log[k];
      cout<<log[k]<<endl;
      ss>>word;
      cout<<word<<endl;
      return 0;
4

2 に答える 2

1

いつ

ss >> w >> x >> y >> z;

が実行された場合、操作するコンテンツは残っておらず、ss.good()はfalseを返します。これは、すべてが正常であり、次に進むことができることを保証するためにss.clear()を呼び出す必要があることを表します。

しかし、あなたがすることを考えると

ss.clear();
ss<<log[k];

ssの内容は

aaa 11 22 33 44bbb 55 66 77 88

このようにしたい場合は、結構です。しかし多分あなたはそれが含まれていることを期待していました

bbb 55 66 77 88

これはによって行われます

ss.str(log[k]);
ss.clear();
于 2010-05-16T06:34:40.720 に答える
0

2 回目に stringstream に書き込むと、入力ポインター (tellg) が -1 に設定され、失敗ビットが設定されます。つまり、2 回目の書き込みも 2 回目の読み取りも成功しません。

于 2010-05-16T06:10:52.840 に答える