C++ 将字符串转换为int

C++ 将字符串转换为int,c++,stringstream,C++,Stringstream,在运行行convert>>quarter之后,我得到了随机数,我想在再次运行转换之前,我必须清除stringstream,但是我该怎么做呢?有人能解释一下在这个过程中发生了什么吗:(我发现这是一个解决方案,但不太明白) - 播放解析(字符串toParse){ 向量标记; 弦乐演奏=toParse; 字符串oName,dName; 整数x,四分之一,分钟,向下,尺度,跳跃,播放; 对于(整数y=0;y>1/4; convert.str(令牌[2]); 转换>>分钟; convert.str(令牌[

在运行行
convert>>quarter
之后,我得到了随机数,我想在再次运行转换之前,我必须清除stringstream,但是我该怎么做呢?有人能解释一下在这个过程中发生了什么吗:(我发现这是一个解决方案,但不太明白)

-

播放解析(字符串toParse){
向量标记;
弦乐演奏=toParse;
字符串oName,dName;
整数x,四分之一,分钟,向下,尺度,跳跃,播放;
对于(整数y=0;y>1/4;
convert.str(令牌[2]);
转换>>分钟;
convert.str(令牌[6]);
转换>>向下;
convert.str(令牌[7]);
转换>>尺度;
convert.str(令牌[8]);
转换>>OC;
playdesc=findPlay(令牌[9]);
游戏a(四分之一,分钟,代币[4],代币[5],向下,尺度,STARTOC,playdesc,游戏);
返回a;
}

谢谢。

如果您继续这样做,您需要在调用str()后调用clear():

问题是第一次转换读取整个字符串,这意味着它将流的iostate设置为eof。调用str()不会重置iostate。您必须手动执行此操作


在您的代码中,iostate在以后的所有转换中都是eof,因此甚至不会尝试任何转换。

如果继续这样做,则需要在调用str()后调用clear():

问题是第一次转换读取整个字符串,这意味着它将流的iostate设置为eof。调用str()不会重置iostate。您必须手动执行此操作


在您的代码中,iostate在以后的所有转换中都是eof,因此甚至没有尝试任何转换。

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

像这样:
quarter=atoi(令牌[1].c_str());
分钟=atoi(令牌[2].c_str());


关于

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

像这样:
quarter=atoi(令牌[1].c_str());
分钟=atoi(令牌[2].c_str());


关于

您可以使用函数stoi(C++11)


您可以只使用
函数stoi(C++11)


如何清除stringstream(非常可搜索):您不需要清除它,因为您正在使用
convert.str(…)重新初始化它
。我希望得到一个解释,Chris。Barmar,你知道我会得到什么坏值吗?Quarter和minutes都是整数,当我将Quarter字符串转换为整数时,它是成功的,当我转换minutes时,我得到一个非常大的数。你用什么调用函数?PlayList.push_back(解析(行));如何清除stringstream(非常可搜索):您不需要清除它,因为您正在使用
convert.str(…)重新初始化它
。我希望得到一个解释,Chris。Barmar,你知道我会得到什么坏值吗?Quarter和minutes都是整数,当我将Quarter字符串转换为整数时,它是成功的,当我转换minutes时,我得到一个非常大的数。你用什么调用函数?PlayList.push_back(parse(line));
    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;
}
stringstream convert(tokens[1]);
convert >> quarter;                // Conversion 1
convert.str(tokens[2]);
convert.clear();
convert >> minutes;                // Conversion 2
...
quarter = stoi(tokens[1])