将字符串转换为int

时间:2013-09-17 00:37:56

标签: c++ stringstream

我在运行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;
}

谢谢。

3 个答案:

答案 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()函数。

像这样:
quarter = atoi(tokens [1] .c_str());
minutes = atoi(tokens [2] .c_str());
......

此致

答案 2 :(得分:0)

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

quarter = stoi(tokens[1])
相关问题