1

行を実行した後に乱数を取得しconvert >> quarterています。再度変換するには、実行する前に stringstream をクリアする必要があると思いますが、どうすればそれを行うことができますか? そして、誰かが何が起こっているのか説明できますか:(これは解決策として見つかりましたが、よくわかりません)

    stringstream convert(tokens[1]);
    convert >> quarter;

-

Play parse(string toParse){
    vector<string> tokens;
    string play = toParse;
    string oName, dName;
    int x, quarter, minutes, down, yardstogo, startloc, playdesc;
    for(int y=0; y<10; y++){
        x = toParse.find(",");
        tokens.push_back(toParse.substr(0,x));
        toParse = toParse.substr(x+1);
    }
    stringstream convert(tokens[1]);
    convert >> quarter;
    convert.str(tokens[2]);
    convert >> minutes;
    convert.str(tokens[6]);
    convert >> down;
    convert.str(tokens[7]);
    convert >> yardstogo;
    convert.str(tokens[8]);
    convert >> startloc;
    playdesc = findPlay(tokens[9]);
    Play a(quarter, minutes, tokens[4], tokens[5], down, yardstogo, startloc, playdesc, play);
    return a;
}

ありがとうございました。

4

3 に答える 3

1

このままやり続ける場合は、str() を呼び出した後に clear() を呼び出す必要があります。

stringstream convert(tokens[1]);
convert >> quarter;                // Conversion 1
convert.str(tokens[2]);
convert.clear();
convert >> minutes;                // Conversion 2
...

問題は、最初の変換で文字列全体が読み取られることです。つまり、ストリームの iostate が eof に設定されます。str() を呼び出しても、iostate はリセットされません。手動で行う必要があります。

コードでは、後のすべての変換で iostate が eof であるため、変換は試行されません。

于 2013-09-17T01:15:49.020 に答える
0

おそらく、stringstream 変換メソッドよりも高速な atoi() 関数を使用する必要があります。

次のように:
Quarter = atoi(tokens[1].c_str());
分 = atoi(tokens[2].c_str());
...

よろしく

于 2013-09-17T01:31:16.053 に答える