使用stringstream操作底层字符串对象

时间:2010-10-25 16:10:29

标签: c++

我是C ++的新手,仍然在使用stringstream。 我写了一小段代码,但没有提供所需的输出 代码如下:

#include "iostream"
#include "sstream"

using namespace std;
int main ()
{
   string xyz;
   cout << "Initial xyz : " << xyz << endl;
   stringstream s1 ( xyz );
   s1 << "Hello";
   cout << "Final xyz : " << xyz << endl;
}

输出:

Initial xyz : 
Final xyz : 

我的理解是stringstream作为字符串对象的包装器。因此,一旦stringstream用字符串对象初始化,对流的任何写操作都会影响底层字符串对象。所以当我写“Hello”来流和打印字符串xyz,它应显示“Hello”。但显然情况并非如此。 有人可以告诉我我错在哪里以及如何使用stringstream操纵底层字符串? 提前致谢 ! VIMAL

4 个答案:

答案 0 :(得分:5)

它不是包装器。它在里面分配自己的字符串对象。但是你可以分配你的xyz:

s1 << "Hello";
xyz = s1.str();

答案 1 :(得分:0)

Stringstream是字符串对象的包装器 - 它是自己的内部字符串对象。你不能将它设置为包装外部字符串,因为那将是非常不安全的。

答案 2 :(得分:0)

它不是字符串的包装器,它是。 (就像你可以谈论音频流一样)

它允许您操纵虚拟字符串,就像操作文件一样。 通过顺序添加数据或按顺序读取数据。

这是the cplusplus reference for stringstream

当你想使用构造的字符串时,你可以在其上调用str()。

顺便说一下,stringstream的一个常见用法是将它用作字符串转换器。 它应该优先于所有atoi itoa东西。

答案 3 :(得分:0)

非常感谢您的快速回复。 我现在的理解是: - &GT;如果需要将字符串视为流(示例以便于提取),则创建新的stringstream对象并使用字符串对其进行初始化。流将字符串的内容复制到其自己的内部字符串中。任何后续写入操作在流上不会影响原始字符串。

- &GT;但是,如果需要创建一个全新的字符串,只需创建一个空白的stringstream对象,而不用字符串对象初始化它。写入流并完成后,只需使用stringstream的str()方法将stream的字符串的内容复制到你自己的字符串。 我尝试了如下,它工作正常。

#include "iostream"
#include "sstream"

using namespace std;
int main ()
{
   stringstream s1;
   s1 << "Hello";
   string xyz = s1.str();
   cout << "Final xyz : " << xyz << endl;
}

无论如何,我的原始查询已得到圆满解决。 再次感谢。