C++输入输出流

输入输出流

  • 说明:IO对象无拷贝或者赋值的操作,有许多标志位,可以判断当前IO的状态

控制台输入输出

  • 主要是cincout
  • 标准库将cincout关联在一起,当使用cin的时候,cout的缓冲区也会被刷新

文件输入输出

文件模式
  • 分类
    • in:以读方式打开
    • out:以写的方式打开
    • app:每次写操作前,都定位到文件末尾
    • ate:打开文件后,立刻定位到文件末尾
    • trunc:截断文件
    • binary:以二进制方式运行io
  • 说明
    • 只有对ofstream或者fstream对象设定out模式
    • 只有对ifstream或者fstream对象设定in模式
    • out模式也被设定时,才能设定trunc模式
    • 只使用out模式,会覆盖掉原始文件中的内容
  • 注意:使用open函数可以打开输入输出流,使用close可以进行关闭,当然,对于声明的变量,可以因为对象被销毁而关闭,但是还是建议尽量手动关闭,防止后续的误操作
  • 代码

    void test()
    {
        vector<string> words;
        string s;
        char ch[1024];
        ifstream infile("text.txt", ios::in);
        ofstream ofile("sentence.txt", ios::out);
        if (ofile)
        {
            // 按行读入
            while (infile.getline(ch, 1024))
            {
                cout << ch << endl;
                ofile << ch << endl;
            }
            infile.close();
            ofile.close();
        }
    
        infile.open("text.txt", ios::in);
        ofile.open("words.txt", ios::out);
        if (ofile)
        {
            // 按单词读入(遇到空格、换行、制表符等都会视为一个单词的结束)
            while (infile >> s)
            {
                cout << s << endl;
                ofile << s << endl;
            }
            infile.close();
            ofile.close();
        }
    }
    

string流

简介
  • sstream头文件中定义了三个类,用于支持内存IO,istringstream从string读入数据,ostringstream向string写入数据,stringstream支持上面两种操作
  • 代码

    void test()
    {
        vector<string> words;
        string s;
        char ch[1024];
        ifstream infile("contact.txt", ios::in);
    
        unordered_map<string, vector<int>> infos;
    
        while (getline(infile, s))
        {
            string key;
            vector<int> vec;
            int tmp = 0;
            istringstream is(s);
            is >> key; // 构造一个包含字符串的读入缓冲区,然后可以从这个缓冲区中读取所需要的信息
            while (is >> tmp)
            {
                vec.push_back(tmp);
    
            }
            infos[key] = vec;
            cout << s << endl;
        }
        cout << "=====infos======" << endl;
        ostringstream os;
        for (auto it = infos.begin(); it != infos.end(); it++)
        {
            os << "key is : " << it->first << ", value is : ";
            for (auto & num : it->second)
                os << num << " ";
            cout << os.str() << endl;
            os.str("");
            //os.clear(); //这句话只是清空缓冲区的标志位,并没有清空缓冲区的内容
        }
    
    }
    
  • contact中的内容

    AA 1 4 7
    BB 2 5 8
    CC 3 6 9
    
为了方便,把代码放在Word里面了,每次上机实验的题目代码都在。 第一次: 对如下多项式编写类定义: + + +…+ 其中,n为多项式的次数。完成如下功能: (1) 可存储任意大的多项式(提示:可用动态数组实现)。 (2) 定义构造函数、析构函数、拷贝构造函数。 (3) 包含一个static成员存储定义的多项式的数量。 (4) 定义一个成员函数输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函数计算多项式的值。 (6) 写main函数测试类的功能。 (7) 采用多文件实现。 考虑:哪些成员函数可以声明为const. 第二次: (8) 重载“+”运算符,实现两个多项式相加。 (9) 重载“-”运算符,实现两个多项式相减。 (10) 重载“*”运算符,实现两个多项式相乘。 (11) 重载“=”运算符,实现两个多项式的赋值运算。 考虑:把其中某个运算符重载为友元函数。 第三次: C++的一般编译器都定义和封装了字符串功能,请模仿定义string类的实现,可以实现并支持如下功能: (1)string s = “吉林大学”; (2)string t = s; (3)string m; m = t; (4)m.legnth() 函数测量字符串的长度 (5)m.cat(string const &)连接字符串 第四次: 我公司为仪器生产企业,目前生产摄像机和行车记录仪两种产品,分别销售给用户。 摄像机包含摄像、图像质量设定、编码算法等属性。 将摄像机增加相应芯片(具有操作菜单、自动拍摄、车速传感器、源代码等功能)后,形成一个行车记录仪。 要求: 设计摄像机类,并请根据下列不同的功能要求,采用不同的继承方式,设计行车记录仪类,并添加测试代码,体验不同继承方式下的成员访问属性。(类设计时可根据需要自行添加数据成员和其他成员函数。) (1) 行车记录仪的芯片可以使用摄像机的摄像、图像质量设定功能。 行车记录仪用户可以操作行车记录仪的操作菜单和摄像机的摄像功能。 (2)行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单。 (3) 行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单 同时其他公司购买行车记录仪,因该公司也用于销售,不得泄露其全部内容 课后: (1)采用组合方式设计行车记录仪类,增加相应测试代码,体验继承和组合的关系。 (2)分别为继承和组合方式下为各类添加构造函数、析构函数,增加相应测试代码,体验对象的初始化和构造顺序。 (3)将摄像机类和行车记录仪类功能相近的函数(如拍摄、编码等功能函数)设为同名函数,增加相应测试代码,体验同名函数覆盖。 (4)为我公司建立一个多态的产品类层次结构,使用抽象类,测试时,创建一个基类指针的容器,通过基类指针调用虚函数,体验多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

littletomatodonkey

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

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

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

打赏作者

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

抵扣说明:

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

余额充值