实验6 流类库与I/O

part1

1.合并两个文件

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main() {
string filename1, filename2, newfilename;
cout << "输入要合并的两个文件名: " ;
cin >> filename1 >> filename2;
cout << "输入合并后新文件名: " ;
cin >> newfilename;
ofstream fout; // 输出文件流对象
ifstream fin; // 输入文件流对象
fin.open(filename1); // 将输入文件流对象fin与文件filename1建立关联
if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出
cerr << "fail to open file " << filename1 << endl;
system("pause");
exit(0);
}
fout.open(newfilename); // 将输出文件流对象fout与文件newfilename建立关联
if(!fin.is_open()) { // 如果创建/打开文件失败,输出错误提示信息并退出
cerr << "fail to open file " << newfilename << endl;
system("pause");
exit(0);
}
char ch;
// 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中
while(fin.get(ch))
fout << ch;
fin.close(); // 关闭文件输入流对象fin与文件filename1的关联
fout << endl; // 向文件输出流对象fout中插入换行
fin.open(filename2); // 将输入文件流对象fin与文件filename2建立关联
if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出
cerr << "fail to open file " << filename2 << endl;
system("pause");
exit(0);
}
// 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中
while(fin.get(ch))
fout << ch;
fin.close(); // 关闭文件输入流对象fin与文件filename2的关联
fout.close(); // 关闭文件输出流对象fout与文件newfilename的关联
system("pause");
return 0;
}

part2

1.追加

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main() {
string filename1, filename2, newfilename;
cout << "输入要合并的两个文件名: " ;
cin >> filename1 >> filename2;
cout << "输入合并后新文件名: " ;
cin >> newfilename;
ofstream fout; // 输出文件流对象
ifstream fin; // 输入文件流对象
fin.open(filename1); // 将输入文件流对象fin与文件filename1建立关联
if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出
cerr << "fail to open file " << filename1 << endl;
system("pause");
exit(0);
}
fout.open(newfilename); // 将输出文件流对象fout与文件newfilename建立关联
if(!fin.is_open()) { // 如果创建/打开文件失败,输出错误提示信息并退出
cerr << "fail to open file " << newfilename << endl;
system("pause");
exit(0);
}
char ch;
// 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中
while(fin.get(ch))
fout << ch;
fin.close(); // 关闭文件输入流对象fin与文件filename1的关联
fout << endl; // 向文件输出流对象fout中插入换行
fin.open(filename2); // 将输入文件流对象fin与文件filename2建立关联
if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出
cerr << "fail to open file " << filename2 << endl;
system("pause");
exit(0);
}
// 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中
while(fin.get(ch))
fout << ch;
fin.open("3.txt",ios_base::app);
fout<<"\merge successfully."<<endl;
fin.close();// 关闭文件输入流对象fin与文件filename2的关联
fout.close(); // 关闭文件输出流对象fout与文件newfilename的关联
system("pause");
return 0;
}

part3

1. 已知名单列表文件list.txt。编写一个应用程序,实现从名单中随机抽点n位同学(n由键盘输入),在屏幕上显 示结果,同时也将结果写入文本文件,文件名自动读取当天系统日期,如20190611.txt。

#include "utils.h"
#include <ctime>
using std::string;

const int SIZE = 20;

// 函数功能描述:返回当前系统日期
// 参数描述:无参数
// 返回值描述:以string类型返回系统当前日期,格式诸如20190611
string getCurrentDate() {

    time_t time_seconds = time(0);
    struct tm now_time;
    localtime_s(&now_time, &time_seconds);
    char date[SIZE];

    strftime(date, SIZE, "%Y%m%d", &now_time);

    return (string(date));
}

utils.cpp

//这个头文件里包含了可用工具函数的声明 

#include <string>
using std::string;

// 函数声明
// 返回当前系统时间,格式诸如20190607
string getCurrentDate();

utils.h

#include <iostream>
#include <string>
#include <cstdlib>
#include<fstream>
#include<time.h>
#include "utils.h"

using namespace std;

int main() {

    string filename;
    int n, m = 0, i;

    ofstream fout;
    ifstream fin;

    cout << "输入名单列表文件名:";
    cin >> filename;
    cout << "输入随机抽点人数:";
    cin >> n;
    fin.open(filename, ios_base::in);
    if (!fin.is_open()) {
        cerr << "fail to open file " << filename << endl;
        system("pause");
        exit(0);
    }
    string s, a[100];
    if (fin) {
        while (getline(fin, s)) {
            a[m++] = s;
        }
        fin.close();
    }
    string filename1;
    filename = getCurrentDate();
    cout << "随机抽点中..." << filename1 << endl;
    srand(time(0));
    for (i = 1;i <= n;i++) {
        int num;
        int r = rand();
        num = rand() % m;
        cout << a[num] << endl;
        fout.open(filename, ios_base::app);
        fout << a[num] << endl;
        fout.close();
    }

    system("pause");

    return 0;
}

main.cpp

2. 编程统计英文文本文件中字符数(包括空格)、单词数、行数。文件名由键盘输入。

#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
using namespace std;

int main(){
    string filename;
    char a[1000];
    cout<<"输入要统计的英文文本文件名:";
    cin>>filename;
    ifstream fin;
    int n=0,x=1,b=1;
    char ch;
    fin.open(filename);
    if(!fin.is_open()) {
        cerr << "fail to open file " << filename << endl;
        exit(0);
    }
    while(fin.get(ch))
      {

       if(ch!=‘\n‘)
         {
            n++;
            if(ch==‘ ‘)
              b++;
         }

       else
            {
            b++;
            x++;
            }
    }

    cout<<"字符数: "<<n<<endl;
    cout<<"单词数:"<<b<<endl;
    cout<<"行数:"<<x<<endl;
   return 0;
}

总结:在对文件进行操作时,要把文件放在相应程序的文件夹里。可能是软件版本问题,做出来总是fail to open。相较于之前的程序,简单了些,但是总是出错,还是对基础知识运用不够熟练,做起来没那么顺。

原文地址:https://www.cnblogs.com/jackyayue/p/11040551.html

时间: 2024-10-14 14:44:27

实验6 流类库与I/O的相关文章

实验7流类库和输入输出

基础练习: 11-7: 源代码: #include<iostream> using namespace std; int main() { ios_base::fmtflags original_flags = cout.flags();//保存现在的格式化参数的设置 cout << 812 << '|'; cout.setf(ios_base::left, ios_base::adjustfield);//左对齐值 cout.width(10);//设置输出宽度为10

实验7 流类库和输入输出

基础练习 (1)课本习题11-7 #include <iostream> using namespace std; int main() { ios_base::fmtflags original_flags = cout.flags(); //保存格式化参数设置 cout<< 812<<'|'; cout.setf(ios_base::left,ios_base::adjustfield); //设置对齐方式为左对齐 cout.width(10); //将输出宽度设置

C++学习笔记55:流类库与输入输出

I/O流的概念及流类库的结构 程序与外界环境的信息交换 当程序与外界环境进行信息交换时,存在着两个对象:程序中的对象,文件对象. 流是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动: 流对象与文件操作 程序建立一个流对象 指定这个流对象与某个文件对象建立连接 程序操作流对象 流对象通过文件系统对所连接的文件对象产生作用 提取与插入 读操作在流数据抽象中被称为从流中提取: 写操作被称为向流中写入: 最重要的三个输出流:ostream ofstream ostringstr

9、流类库与输入/输出

就像C语言一样,c++语言中也没有输入/输出语句.但c++编译系统带有一个面向对象的输入/输出软件爱你包,它就是I/O流类库. 1.I/O流的概念及流类库结构 I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品. 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象. 流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动.程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对

流类库和文件

1.流类库 (1).C++中没有输入输出,标准库中包含一个I/O流类库. C语言中printf 和scanf 称为函数: 输出到屏幕 C++中cout和cin称为对象:          输入是键盘 (2).C++流类库中定义4个全局流对象,cin.cout.cerr.clog cin 标准输入流对象,键盘 cout标准输出流,屏幕 cerr和clog标准错误输出流, 屏幕 其中cin.cout.clog是带缓冲区的,缓冲区由streambuf类对象来管理,cerr非缓冲区,一旦错误发生立即显示

流类库

第10章 输入/输出流 I/O(输入/输出)流类库提供对象之间的数据交互服务. 流类库预定义了一批流对象,连接常用的外部设备. 程序员可以定义所需的I/O流对象,使用流类库提供的工作方式实现数据传输. 10.1 流类和流对象 10.2 标志流和流对象 10.3 格式控制 10.4 串流 10.5 文件处理 小结 10.1 流类和流对象 程序中,对数据的输入/输出是以字节流实现的. 应用程序对字节序列作出各种数据解释. I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据. 流类对

南邮JAVA程序设计实验3 流处理程序设计

南邮JAVA程序设计实验3  流处理程序设计 实验目的: 要求学生能在学习和理解课堂学习内容中JAVA流编程理论的基础上,学习并逐步掌握JAVA流程序的编写和调试,学习根据处理需求对不同流的正确选择使用和组合使用方法. 实验内容: 设计和编写一个程序从键盘读入一行字符串,将其写入一个文本文件中,再编写另一个程序从文本文件中读入字符串并在命令行窗口显示出来. 实验程序1: 用数据的基本的读入Scanner读入一行,用缓冲流写入文件. import java.io.*; import java.ut

C++:流类库与输入输出

7.2.1 C++的输入输出流 ios:流基类(抽象类) istream:通用输入流类和其他输入流的基类 ostream:通用输出流类和其他输出类的基类 iostream:通用输入输出流类和其他输入输出流类的基类(以下的派生类对象有cin.cout.cerr.clog) ifstream:输入文件流类 ofstream:输出文件流类 fstream:输入输出文件流 istrstream:输入字符串流类 ostrstream:输出字符串流类 strstream:输入输出字符串类 iostream_

9、流类库与输入/输出2.3输出文件流成员函数

输出流成员函数有三种类型: 与操作符等价的成员函数: 执行非格式化写操作的成员函数 其他修改流状态且不同于操作符或插入运算符的成员函数 对于顺序的格式化输出,可以仅使用插入运算符和操作符.对于随机访问二进制磁盘输出,使用其他成员函数,使用或不使用插入运算符. 1.输出流的open函数 2.输出流的close函数 close成员函数关闭与一个输出文 件流关联的磁盘文件.文件使用完毕后必须将其关闭以完成所有磁盘输出.虽然ofstream析构函数会自动完成关闭,但如果在同一流对象上打开另外的文件,就需