自定义类型的I/O输出用法
来源:互联网 发布:家居装修系统v5.0源码 编辑:程序博客网 时间:2024/05/21 09:42
自定义类的输出就是使得类可以自带输入输出符号操作,使得类可以方便使用。
如有一个结构体:
struct MyStruct{string name;int num;};
我们可以定义简单的输出,并把输出格式化为:{"name","num"},如下代码:
ostream& operator<<(ostream& os, const MyStruct &e){return os<<"{\""<<e.name<<"\","<<e.num<<"}";}
相对应的输入操作就会稍微复杂一点,因为需要检验输入格式是否正确,代码如下:
istream& operator>>(istream& is, MyStruct& e){//读入{"name",num}char c, c2;if(is>>c&&c=='{'&&is>>c2&&c2=='"'){string name;while(is.get(c)&&c!='"')//读符号,直到遇到"为止name+=c;if(is>>c&&c==','){int num=0;if(is>>num>>c&&c=='}'){e.name=name;e.num=num;//最后赋值给结构体return is;}}}is.setf(ios_base::failbit);//标志读入数据流失败return is;}
注意is>>操作符是忽略whitespace(白空格符:如空格,回车);而is.get(c)是把白空格符都一起读入的。所以这个代码的name是可以把空格都读入进去的,甚至把回车符号也读进名字里面去。
如:读入格式{"Macheal Jordan",23},输出也是同样格式。
完整测试代码如下:
#include<iostream>#include<string>using namespace std;struct MyStruct{string name;int num;};ostream& operator<<(ostream& os, const MyStruct &e){return os<<"{\""<<e.name<<"\","<<e.num<<"}";}istream& operator>>(istream& is, MyStruct& e){//读入{"name",num}char c, c2;if(is>>c&&c=='{'&&is>>c2&&c2=='"'){string name;while(is.get(c)&&c!='"')//读符号,直到遇到"为止name+=c;if(is>>c&&c==','){int num=0;if(is>>num>>c&&c=='}'){e.name=name;e.num=num;//最后赋值给结构体return is;}}}is.setf(ios_base::failbit);//标志读入数据流失败return is;}int main(){MyStruct myStruct;myStruct.name="Micheal Jordan,Hello";myStruct.num=23;for(;cin>>myStruct;)cout<<myStruct<<endl;//可以不断读入,知道读入失败为止return 0;}
总结:
很方便的一个技术,这也是C++的特色技术之一。
Reference:
The C++ Programming Language 4ed
- 自定义类型的I/O输出用法
- I/O流的用法
- I/O口的输入与输出
- I/O输入、输出
- I/O口推挽输出与开漏输出的区别
- C++ 输入/输出(I/O)
- Java I/O(输入/输出)
- I/O(输入/输出)
- I/O口的集电极开路与推挽输出
- I|O流 文件的输入和输出
- PLL时钟输出到普通I/O口的办法
- 直接I/O写入与自定义缓存区I/O读写性能之间的区别
- I/O篇(3)——各I/O类的用法
- 说说 Java I/O 系统之 I/O 流的典型用法(带示例)
- AIX几种 I/O 类型概念的介绍
- overlapped I/O的学习,及自定义消息的处理
- C++ I/O流用法
- select I/O模型用法
- Xcode4.5.1破解iOS免证书开发真机调试与ipa发布
- 10.6(3、4周)周报
- 为Android应用程序添加社会化分享功能
- error C2664: “BOOL CDC::TextOutW(int,int,const CString &)”: 不能将参数 3 从“const char [18]”转换为“const CStr
- 为Android应用程序添加社会化分享功能
- 自定义类型的I/O输出用法
- 是的,你没听错:小米手表马上就要来了
- QT 操作excel
- 数据结构全攻略--攻破非线性结构的堡垒之树和二叉树(二)
- jetty使用说明
- 如何破解别人的开机密码
- 美国政府关门会怎样?
- 【Git入门之十二】DIY Git
- 数位DP--ZOJ3416(Balanced Number)