《挑战30天C++入门极限》C++的iostream标准库介绍(2)
C++的iostream标准库介绍(2) 接下来我们继续看一下C++风格的串流控制,C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入操作。 istringstream类是从istream(输入流类)和stringstreambase(c++字符串流基类)派生而来,ostringstream是从ostream(输出流类)和stringstreambase(c++字符串流基类)派生而来,stringstream则是从iostream(输入输出流类)和和stringstreambase(c++字符串流基类)派生而来。 他们的继承关系如下图所示: istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。 //程序作者:管宁 上例中,构造字符串流的时候,空格会成为字符串参数的内部分界,例子中对a,b对象的输入"赋值"操作证明了这一点,字符串的空格成为了整型数据与浮点型数据的分解点,利用分界获取的方法我们事实上完成了字符串到整型对象与浮点型对象的拆分转换过程。 str()成员函数的使用可以让istringstream对象返回一个string字符串(例如本例中的输出操作(cout<<istr.str();)。 ostringstream同样是由一个string对象构造而来,ostringstream类向一个string插入字符。 示例代码如下: //程序作者:管宁 在上例代码中,我们通过put()或者左移操作符可以不断向ostr插入单个字符或者是字符串,通过str()函数返回增长过后的完整字符串数据,但值得注意的一点是,当构造的时候对象内已经存在字符串数据的时候,那么增长操作的时候不会从结尾开始增加,而是修改原有数据,超出的部分增长。 对于stringstream了来说,不用我多说,大家也已经知道它是用于C++风格的字符串的输入输出的。 stringstream::stringstream(string 示例代码如下: //程序作者:管宁 除此而外,stringstream类的对象我们还常用它进行string与各种内置类型数据之间的转换。 示例代码如下: //程序作者:管宁 接下来我们来学习一下输入/输出的状态标志的相关知识,C++中负责的输入/输出的系统包括了关于每一个输入/输出操作的结果的记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包含的值。 goodbit 无错误 Eofbit 已到达文件尾 failbit 非致命的输入/输出错误,可挽回 badbit 致命的输入/输出错误,无法挽回 有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记。例如,假如没有任何错误,则rdstate()会返回goodbit. 下例示例,表示出了rdstate()的用法: //程序作者:管宁 另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态: bool bad(); bool eof(); bool fail(); bool good(); 下例示例,表示出了上面各成员函数的用法: //程序作者:管宁 如果错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。 示例代码如下: //程序作者:管宁 通常当我们发现输入有错又需要改正的时候,使用clear()更改标记为正确后,同时也需要使用get()成员函数清除输入缓冲区,以达到重复输入的目的。 示例代码如下: //程序作者:管宁 最后再给出一个对文件流错误标记处理的例子,巩固学习,代码如下: //程序作者:管宁 |
|||
最新文章
- GCD深入学习(1)dispatch_semaphore
- .NET (四)委托第四讲:内置委托Comparison
- P2661 信息传递 TODO-TARJAN算法
- redis补充和rabbitmq讲解
- wand(weak and)算法基本思路
- SVN项目库错误Unsupported FS format svn: Expected FS format between &#39;1&#39; and &#39;4&#39;; found format &#39;6&#39;
- Ubuntu mysql中文乱码解决
- Ubuntu 14.10 编译 qt4.8.6
- PLSQL Developer 连接oracle(64)(instantclient_32)
- Nosql简介 Redis,Memchche,MongoDb的区别
- Android为TV端助力 UDP协议
- 【转】vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的
- Python操作Redis数据库
- 开启打印服务Print Spooler
- linux文件查看
- Android 关于缓存的一些类
- [C#]RichTextBox实现拖放
- DDD领域模型企业级系统(三)
- 简简单单搞掂恼人的Laravel 5安装
- Junit4用法
热门文章
- nginx配置http静态站点服务器
- 前端开发 Angular
- C++项目链接出错, error LNK2019: 无法解析的外部符号 __imp_xxxx_Allocate,该符号在函数 ";xxxx"; (xxxx) 中被引用
- 【转载】 C#中List集合使用InsertRange方法在指定的位置插入另一个list集合
- js 的七大原则--单一原则、开闭原则、替换原则(一)
- Vue通过WebSocket建立长连接
- 【雅思】【绿宝书错词本】List1~12
- Jmeter学习笔记(八)——监听器元件之聚合报告
- sqlserver 将一个表中的某些字段更新到另一个表中(转载)
- django获取数据queryset中的filter选项