清除并重复使用字符串流进行多次转化

时间:2016-09-09 18:41:40

标签: c++ stringstream

我正在进行黑客等级分配,需要一种方法将字符串转换为int并决定使用stringstream(我第一次使用它)。有没有办法以某种方式使用相同的声明stringstram(你怎么称呼它?)而不是为每次转换创建新的?我尝试使用.clear()函数,它仍然无效。

我是怎么做到的:

stringstream s0(hour); // this is my way of converting string to int because stoi doesn't seem to work
s0 >> i_hour;
cout << i_hour << endl;
stringstream s1(minute);
s1 >> i_minute;
stringstream s2(second);
s2 >> i_second;`

以及我想怎么做:

stringstream ss(hour);
ss >> i_hour;
ss.clear();
ss << minute;
ss >> i_minute;

有什么方法可以这样做吗?看起来真的很乱以继续声明新的。

2 个答案:

答案 0 :(得分:2)

您可以调用str(s)方法将std::istringstream初始化为新字符串。如果您所做的只是从字符串转换,则应使用std::istringstream

如果之前的转化导致错误,您还需要clear(),以清除其错误状态。

所以你的例子是:

istringstream ss(hour);
ss >> i_hour;
ss.clear();
ss.str(minute);
ss >> i_minute;

答案 1 :(得分:2)

使用

ss.str("");

清除流。 ss.clear()仅重置标志。