使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串
Posted
技术标签:
【中文标题】使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串【英文标题】:C++ Int to String by using ostringstream or stringstream 【发布时间】:2012-01-09 20:54:27 【问题描述】:我一直在使用stringstream
将Integer
转换为String
,但后来我意识到ostringstream
可以完成相同的操作。
当我使用.str()
时,它们之间有什么区别?另外,有没有更有效的方法将整数转换为字符串?
示例代码:
//using ostringstream
ostringstream s1;
int i=100;
s1<<i;
string str_i=s1.str();
cout<<str_i<<endl;
//using stringstream
stringstream s2;
int i2=100;
s2<<i2;
string str_i2=s2.str();
cout<<str_i2<<endl;
【问题讨论】:
已经在***.com/questions/3292107/…回答了 fnprintf 做同样的工作更快,但这当然取决于你的代码。 C++11 有std::to_string
@cateof 抱歉,我没看到那个帖子。
@BenjaminLindley whoaaaa C++11 再次让我大吃一惊。我以为我们得到的只是字符串 -> int 与 stoi
和朋友,但我不知道我们也有其他方式。
【参考方案1】:
还有第三个你没有提到,istringstream
,你不能使用(你可以,但它会不同,你不能 <<
到 istringstream
)。
stringstream
既是 ostringstream
也是 istringstream
- 您可以在 <<
和 >>
两种方式中进出。
ostringstream
,你只能用<<
进去,不能用>>
出去。
没有真正的区别,您可以使用任何一种方式将字符串转换为整数。如果你想以最快的方式做到这一点,我认为boost::lexical_cast
有这个标题,或者你可以使用itoa
函数,它可能比stringstream
更快,但是你失去了 C++ 和标准库的优势,如果你使用itoa
(你必须使用C字符串等)。
此外,正如 Benjamin Lindley 告诉我们的,C++11 拥有超神奇的 std::to_string
。
【讨论】:
非常感谢!我一定会试试你说的方法。 我认为boost::lexical_cast
很棒,但就运行时性能而言,它可能不是最好的。它只是ostringstream
技术的包装。见The String Formatters of Manor Farm。
@FredLarson 我认为 boost 对整数做了一些专门化或使它更快的东西。也许我只是在某个地方误读了一些东西。
@SethCarnegie:哦,也许吧。这将是一个好主意。
@FredLarson,我认为这不再是真的了。从Boost 1.48.0 开始,其中的代码方式 多于stringstream
的简单包装器。以上是关于使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
std::ostringstream 转std::string
stringstream,ostringstream,stringstream