0

[解決済み] 以下の私の回答を参照してください。

stringstream (名前は ss) を使用して、一部の文字列を int に変換したり、一部を double に変換したりしようとしていますが、値がすべて間違っています。 次のように初期化された vecという 名前の文字 列のベクトルがあり
ます 。 次に、ベクトルを調べて、値を int、string、または double に入れます。





std::string lname, fname, pnum;
int ID;
double sales, percent;

if(vec.size()!=6) {
    //throw exception
}
else {
    ss<<std::hex<<vec[0];
    ss>>ID;

    pnum = vec[1];
    lname = vec[2];
    fname = vec[3];

    ss<<vec[4];
    ss>>sales;

    ss<<vec[5];
    ss>>percent;
}

しかし、出力はすべての顧客に対して次のようになります。ints は常に 1 で、doubles は常にこの奇妙な数字は何ですか?

顧客製: Langler Tyson 1 7667230284 2.12303e-314 2.12201e-314

4

2 に答える 2

2

数字を抽出できるようにするには、数字の間にセパレーターを導入する必要があります。

ss << vec[0] << " ";
ss >> ID;
ss << vec[4] << " ";
ss >> sales;
ss << vec[5] << " ";
ss >> percent;

これに加えて、ID を抽出した後、元の 10 進数形式に戻す必要があります。

ss << hex;
ss << vec[0] << " ";
ss >> ID;
ss << dec;

また、同じssストリームを使用してベクター要素を抽出するため、最後のベクター要素が抽出された後のストリームの状態はエラーになります。さらに挿入/抽出する前に、エラー状態をクリアする必要があります。新しいストリームを使用すると、問題も解決します。

ss = stringstream();
ss << hex;
ss << vec[0] << " ";
ss >> ID;
ss << dec;
ss << vec[4] << " ";
ss >> sales;
ss << vec[5] << " ";
ss >> percent;
于 2012-06-20T21:30:20.747 に答える
1

私はそれを機能させました。これが私のメソッド全体のスクリーンショットです:http://i.imgur.com/lFb87.png ssを使用してベクトルをロードしたので、それを再利用して値を取得すると問題が発生したと思います。2番目のstringstreamss2を追加すると、すべてが正しく機能しました。

于 2012-06-20T22:38:07.310 に答える