使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串

Posted

技术标签:

【中文标题】使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串【英文标题】:C++ Int to String by using ostringstream or stringstream 【发布时间】:2012-01-09 20:54:27 【问题描述】:

我一直在使用stringstreamInteger 转换为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,你不能使用(你可以,但它会不同,你不能 &lt;&lt;istringstream)。

stringstream 既是 ostringstream 也是 istringstream - 您可以在 &lt;&lt;&gt;&gt; 两种方式中进出。

ostringstream,你只能&lt;&lt;进去,不能用&gt;&gt;出去。

没有真正的区别,您可以使用任何一种方式将字符串转换为整数。如果你想以最快的方式做到这一点,我认为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

需要一个宏来从 std::ostringstream 和 << arg 列表创建 std::string

string流

std::ostringstream输出流详解

使用 ostringstream 导致程序崩溃