C++基础::Stream

标准I/O库类继承体系


io

对应关系:

  • istream,ifstream,istringstream
  • ostream,ofstream,ostringstream
  • iostream,fstream,stringstream

从上图我们可以看到,stringstream兼具istringstream(从字符串流中读数据)ostringstream(向字符串流中写数据)的功能(它们三者的头文件均位于<sstream>),既然如此我们是不是在任何istringstreamostringstream出现的地方替换为stringstream(任何istreamostream出现的地方替换为iostream,三者的头文件均位于<iostream)呢。然而事实上并没有这么做。

既从一个字符串中读又从中写数据是一件古怪(且很少发生)的行为1

std::stringstream ss;
ss << "hello world ";
                        // world 后要有至少有一个空格,
ss << 42;
std::string str1, str2; int i;
                // 流以空格为分割,且忽略冗余空格
ss >> str1 >> str2 >> i;
std::cout << str1 << str2 << str3 << std::endl;

流的好处

流的好处在于无论何种基本数据类型都可丢到流中,且很方便再重新取出赋值,这是字符串类型所做不到的。

#include <stdlib.h>
                        // _itoa
                        // 进行windows平台下的编译器
std::stringstream ss;
ss << "hello world " << 42;
std::string str1, str2; int i;
ss >> str1 >> str2 >> i;

std::string s;
int i = 42;
s += "hello world ";
char arr[5];
_itoa(i, arr, 10);
s += arr;
                                // 较为啰嗦和复杂

good()

判断文件打开是否成功:

std::ofstream ofs("./1.txt");
assert(ofs.good());
        // 文件打开成功时,good()返回值为true
        // 否则为false

返回值类型

C++ 中的 string 类型定义:

typedef basic_string<char, char_traits<char>, allocator<char> >
    string;
  • 对 string 类型的 s 而言,s.c_str():string ==》 char*

  • 对流类型的 s 而言,s.str():stream ==》 string

References

[1] <C++标准I/O库:iostream, fstream, sstringstream>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值