式武神

导航

第六次实验

1. 合并两个文件到新文件中。文件名均从键盘输入。

2.使用文件I/O流,以文本方式打开Part1中合并后的文件,在文件最后一行添加字符"merge successfully. "

#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的关联
    ofstream file;
    file.open(newfilename, ios_base::app);
    file << endl << "merge successfully" << endl;
    file.close();
    system("pause");
    return 0;
}
main.cpp

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

#include<iostream>
#include<fstream>
#include<string>
#include<ctime>
#include"utils.h"
char s[83][100];
using namespace std;
int main()
{
    int n, i, j,a;
    string filename;
    ifstream file;
    ofstream fl;
    char ch;
    srand((unsigned)time(NULL));
    cout << "输入名单列表文件名:";
    cin >> filename;
    cout << "输入随机抽点人数:";
    cin >> n;
    file.open(filename);
    for (i = 0; i < 83; i++) {
        for (j = 0; j < 100; j++) {
            ch = file.get();
            s[i][j] = ch;
            if (ch == '\n')
            {
                break;
            }

        }
    }
    file.close();
    fl.open(getCurrentDate());
    for (i = 0; i < n; i++) {
        a = rand() % 83;
        cout << s[a];
        fl << s[a];
    }

    fl.close();
    system("pause");
    return 0;
}
main.cpp

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

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
    int i = 0, zifu = 0, danci = 0, hangshu = 1;
    char ch;
    char s[100];
    string filename;
    ifstream file;
    cout << "输入要统计的英文文本文件名:";
    cin >> filename;
    file.open(filename);
    while ((ch = file.get()) != EOF)
    {
        s[i] = ch;
        if (ch != '\n')
            zifu += 1;
        else if (ch == '\n')
            hangshu += 1;
        i++;
    }
    for (i = 0; i < 100; i++)
    {
        if (s[i] != ' '&&s[i] != ','&&s[i]!='.'&&s[i + 1] == ' ')
            danci += 1;
        else if (s[i] != ' '&&s[i] != '.'&&s[i] != ','&&s[i + 1] == '.')
            danci += 1;
        else if (s[i] != ','&&s[i] != ' '&&s[i]!='.'&&s[i + 1] == ',')
            danci += 1;
    }
    cout << "字符数:" << zifu << endl;
    cout << "单词数:" << danci << endl;
    cout << "行数:" << hangshu << endl;
    system("pause");
    return 0;
}
main.cpp

实验总结与体会:

1.通过本次实验,我初步掌握了输入流与输出流的使用,理解和体会了文件I/O的方法。

2.本次实验让我知道了如何读取系统时间,复习了随机数的使用。

3.在file.open()之后,不要忘了file.close()。

4.使用随机数时,一定要用srand()为rand()设置随机数种子,不然使用的只是伪随机数。

 

posted on 2019-06-11 19:13  式武神  阅读(167)  评论(0编辑  收藏  举报