首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cout <<字符串流

cout <<字符串流
EN

Stack Overflow用户
提问于 2012-01-11 17:21:39
回答 4查看 67.2K关注 0票数 26

当我把一些东西放到一个字符串流中,假设是一个实数,如果我把这个字符串流对象插入到cout...what中,我看到的是吗?

通常我会得到一些奇怪的数字。这是一个内存位置吗?只是好奇而已。

它看起来像是下面的评论击中了它,但这是我试图做的:

代码语言:javascript
复制
string stringIn; 
stringstream holdBuff;
holdBuff << getline(cin, stringIn);
cout << holdBuff; 

基本上,我只是想看看我插入stringIn后holdBuff是什么样子的。我试图让用户输入一个字符串,然后我想逐步通过它,寻找它的内容,并可能转换…

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-11 18:24:45

你怎么认为

代码语言:javascript
复制
holdBuff << getline(cin, stringIn);

正在做什么。在本例中,getline的返回类型是对正在读取的流(cin)的引用。因为没有定义将std::istream作为第二个参数的<<,所以编译器尝试不同的转换:在C++11中,std::istream隐式转换为bool,在早期的C++中,隐式转换为std::ios*或类似的转换(但返回值的唯一有效用途是将其转换为bool)。因此,您要么输出1 (C++11),要么输出一些随机地址(实际上,通常是流的地址,但这是不能保证的)。如果您想将调用getline的结果放入std::ostringstream中,则需要两个操作(并检查它们之间是否存在错误):

代码语言:javascript
复制
if ( !getline( std::cin, stringIn ) )
    //  Error handling here...
holdBuff << stringIn;

类似地,要编写std::ostringstream的内容,

代码语言:javascript
复制
std::cout << holdBuf.str() ;

才是正确的解决方案。如果您坚持在std::ostringstream更合适的情况下使用std::stringstream,您还可以这样做:

代码语言:javascript
复制
std::cout << holdBuf.rdbuf();

然而,第一种解决方案更可取,因为它更惯用。

在任何情况下,再一次,没有接受任何iostream类型的<<运算符,因此您最终得到隐式转换为bool或指针的结果。

票数 28
EN

Stack Overflow用户

发布于 2012-01-11 17:24:51

是的,您可能会看到字符串流的地址。

如果想要显示它所包含的字符串,请尝试

代码语言:javascript
复制
cout << stream.str();
票数 24
EN

Stack Overflow用户

发布于 2012-01-11 17:24:02

代码语言:javascript
复制
cout << s.rdbuf();

就是你想要的。或者,您可能想要

代码语言:javascript
复制
cout << s.str();

这在资源方面可能更昂贵。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8816817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档