将字符串转换为整数

Converting a string to an int

本文关键字:整数 转换 字符串      更新时间:2023-10-16

>我在运行行convert >> quarter后得到随机数,我想我必须在运行它才能再次转换之前清除字符串流,但是我将如何去做呢?有人可以解释一下期间发生了什么:(我发现这是一个解决方案,但不太理解)

    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;
}

谢谢。

如果你继续这样做,你需要在调用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,因此甚至不会尝试转换。

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

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

问候

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

quarter = stoi(tokens[1])