我有一个函数,它接受一个字符串参数,并且有一个整数变量,然后我应该将其转换为字符串,然后将其传递给我使用此代码的函数,但由于ostringstream用于I/O,所以它不起作用。
ostringstream ostr;
while (.....)
{
regnum++;
ostr<<regnum;
grph.addlastname(ostr.str());
}
例如,它将12345传递给函数而不是5,我该怎么办?
这是真的-有很多类似的问题可以解决"最好的方法是什么?"但我认为,在回答"为什么这不起作用?"的问题时,OP需要学习一些东西
因此:
您的stringstream
有一个内部状态,在循环过程中,您总是附加一个新的数字,但以前的数字仍在流中!您可以通过使stringstream
作用域成为循环的本地作用域来解决此问题,即在循环内而不是在循环外声明它
(不过,std::to_string
仍然是解决这个特定问题的更好方案。)
除了一件事,一切都很好,参见:
ostringstream ostr;
while (.....)
{
regnum++;
ostr<<regnum;
grph.addlastname(ostr.str());
}
你在while之外声明你的ostr,while第一次运行时,它会向ostr添加"1",第二次,因为它是同一个"ostringstream"变量,它会添加"2",所以你的字符串现在将是"12"。。。
解决方案:声明ostringstream-ostr,在while中,使用std::to_string,或者每次while结束时执行ostr.clear()。(最好的方法是在你的时间内声明你的ostr)