【c++】字符串流输出恢复状态问题

简介:

缘起

复制代码
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
    istringstream iss;
    string str1, str2, str3, str4, str5, str6;
    iss.str("I love you");
    iss >> str1 >> str2 >> str3;
    cout << str1 << " " << str2 << " "<< str3 << endl;
    iss.str("I hate you");
    iss >> str4 >> str5 >> str6;
    cout << str4 << " " << str5 << " "<< str6 << endl;
}
复制代码

期待输出

      

可以结果是

     

问题

    没有输出“I  hate you"。究竟是什么原因导致 流没有输出到字符串中?

一番折腾知道,此时流的eof为1(已经达到结束符),此时必须用函数clear()把所有的状态值设为有效状态值。经过修改程序如下:

复制代码
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
    istringstream iss;
    string str1, str2, str3, str4, str5, str6;
    iss.str("I love you");
    cout << "before" << iss.str() << endl;
    iss >> str1 >> str2 >> str3;
    cout << str1 << " " << str2 << " "<< str3 << endl;
    
    cout << "eofbit:" << iss.eof() << endl;
    iss.clear();
    cout << "eofbit:" << iss.eof() << endl;

    iss.str("I hate you");
    cout << "after:" << iss.str() << endl;
    iss >> str4 >> str5 >> str6;
    cout << str4 << " " << str5 << " "<< str6 << endl;
}
复制代码

正确结果

程序用到知识

 

 




本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3240775.html,如需转载请自行联系原作者

相关文章
|
3月前
|
C语言 C++
【实战指南】 C/C++ 枚举转字符串实现
本文介绍了在C/C++中实现枚举转字符串的实用技巧,通过宏定义与统一管理枚举名,提升代码调试效率并减少维护错误。
252 56
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
217 4
|
8月前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
164 16
|
12月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
327 0
|
12月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
算法 C++
2730. 找到最长的半重复子字符串(c++,滑动窗口)
2730. 找到最长的半重复子字符串(c++,滑动窗口)
567. 字符串的排列(c++)滑动窗口
567. 字符串的排列(c++)滑动窗口
100 1
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以&#39;\0&#39;结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加&#39;\0&#39;。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。