我在运行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;
}
谢谢。
答案 0 :(得分: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,因此甚至不会尝试转换。
答案 1 :(得分:0)
你应该使用比stringstream转换方法更快的atoi()函数。
像这样:此致
答案 2 :(得分:0)
您可以使用<string>
函数stoi(C ++ 11)...
quarter = stoi(tokens[1])