C++ 流(stream)总结

C++ 流(stream)总结

框架:

在这里插入图片描述

C++中流的概念

C++流涉及以下概念:

标准I/O流:内存与标准输入输出设备之间信息的传递;
文件I/O流:内存与外部文件之间信息的传递;
字符串I/O流:内存变量与表示字符串流的字符数组之间信息的传递

STL中定义的流类:

流类分类流类名称流 类 作 用
流基类ios所有流类的父类,保存流的状态并处理错误
输入流类istream输入流基类,将流缓冲区中的数据作格式化和非格式化之间的转换并输入
ifstream文件输入流类
istrstream串输入流类, 基于C类型字符串char*编写
输出流类ostream输出流基类,将流缓冲区中的数据作格式化和非格式化之间的转换。并输出
ofstream文件输出流类
ostrstream串输入流类, 基于C类型字符串char*编写
输入/输出流类iostream多目的输入/输出流类的基类
fstream文件流输入/输出类
strstream串流输入/输出类, 基于C类型字符串char*编写

注,对于串流,提供了两套类,一个基于C类型字符串char *编写(定义于头文件strstream),一个基于std::string编写(定义于sstream), 后者是C++标准委员会推荐使用的。

文件流

打开方式
在这里插入图片描述
以上打开方式, 可以使用位操作 | 组合起来
想对文件进行写入操作,当文件已经存在时,你希望对该文件进行截断操作

fstream stream;
stream.open("demo.txt", ios::out | ios::trunc);

想对文件进行读取操作,而且想在文件尾部读取

fstrem inFile;
inFile.open("demo.txt", ios::in | ios::ate);
文件流二进制读写
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main() {

    ifstream infile;
    ofstream outfile;
    std::vector<char> buffer;

    infile.open("E:/Desktop/girl.jpg", std::ifstream::binary);

    //获取文件长度
    infile.seekg(0, std::ifstream::end);
    long size = infile.tellg();
    infile.seekg(0);

    //写入buffer
    buffer.resize(size);
    infile.read(&buffer[0], size);

    //写入二进制文件
    outfile.open("E:/Desktop/girl.bin", std::ofstream::binary);
    outfile.write(&buffer[0], buffer.size());

    infile.close();
    outfile.close();
}

使用流操作算子 setiosflags

参考: link

在这里插入图片描述
例如下面的三条语句:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int n = 141;
    //1) 分别以十六进制、十进制、八进制先后输出 n
    cout << "1)" << hex << n << " " << dec << n << " " << oct << n << endl;
    double x = 1234567.89, y = 12.34567;
    //2)保留5位有效数字
    cout << "2)" << setprecision(5) << x << " " << y << " " << endl;
    //3)保留小数点后面5位
    cout << "3)" << fixed << setprecision(5) << x << " " << y << endl;
    //4)科学计数法输出,且保留小数点后面5位
    cout << "4)" << scientific << setprecision(5) << x << " " << y << endl;
    //5)非负数显示正号,输出宽度为12字符,宽度不足则用 * 填补
    cout << "5)" << showpos << fixed << setw(12) << setfill('*') << 12.1 << endl;
    //6)非负数不显示正号,输出宽度为12字符,宽度不足则右边用填充字符填充
    cout << "6)" << noshowpos << setw(12) << left << 12.1 << endl;
    //7)输出宽度为 12 字符,宽度不足则左边用填充字符填充
    cout << "7)" << setw(12) << right << 12.1 << endl;
    //8)宽度不足时,负号和数值分列左右,中间用填充字符填充
    cout << "8)" << setw(12) << internal << -12.1 << endl;
    cout << "9)" << 12.1 << endl;
    return 0;
}

输出结果是:

1)8d 141 215
2)1.2346e+06 12.346
3)1234567.89000 12.34567
4)1.23457e+06 1.23457e+01
5)***+12.10000
6)12.10000****
7)****12.10000
8)-***12.10000
9)12.10000

重定向 freopen

#include <iostream>
using namespace std;
int main()
{
    int x,y;
    cin >> x >> y;
    freopen("test.txt", "w", stdout);  //将标准输出重定向到 test.txt文件
    if( y == 0 )  //除数为0则输出错误信息
        cerr << "error." << endl;
    else
        cout << x /y ;
    return 0;
}
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
回答: 在C++中,stringstream是一个类似于字符串的对象,它可以用于字符串和其他数据类型之间的转换。可以使用stringstream来清空、拼接字符串,以及将不同类型的数据转换为字符串。 引用中的代码示例展示了如何清空stringstream对象。可以使用clear()方法或者str("")方法来清空stringstream。当需要进行多次数据类型转换时,使用clear()方法是必要的,而str("")方法适用于其他场景。 引用中的代码示例展示了一个将多个字符串拼接到stringstream中,并将其转换为string类型的示例。使用sstream的str()方法可以将其转换为string类型。 引用中的代码示例展示了如何使用stringstream将int类型转换为string类型。可以将int类型的值放入输入中,然后从sstream中抽取该值并赋给string类型。 总结起来,stringstreamC++中用于字符串和其他数据类型之间的转换,可以实现字符串的拼接、清空以及类型转换等功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++ stringstream](https://blog.csdn.net/Sakuya__/article/details/122751238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI_潜行者

赐予我力量吧

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

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

打赏作者

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

抵扣说明:

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

余额充值