清除并重用一个字符串流进行多次转换

Clear and reuse a stringstream for multiple conversions

我正在处理一项 Hacker Rank 作业,需要一种将字符串转换为 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;

有没有类似的方法?一直声明新的看起来真的很乱。

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

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

所以你的例子是:

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

使用

ss.str("");

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