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

您可能应该使用 atoi() 函数,它比 stringstream 转换方法更快。

像这样:
Quarter = atoi(tokens[1].c_str());
分钟 = atoi(tokens[2].c_str());
...

问候

于 2013-09-17T01:31:16.053 回答
0

你可以只使用<string>函数 stoi (C++11) ...

quarter = stoi(tokens[1])
于 2013-09-17T06:20:33.660 回答