C++ 面向对象作业: I/O对象的应用
2017-05-08 13:40
309 查看
1. 补充完整从text.txt文件读取数据后,再写入in.txt文件。
2. 完成从text.txt文件读取数据后,进行排序,再写入in.txt文件。数据量自行设定。
3. 请解决在主程序文件中加载多个头文件时,命名冲突问题。
解决方案
用随机生成函数生成数据写入文件流,
然后再读取文件流,讲数据存入 num[],排序,
将 num[] 中数据写入新文件,
不在全局打开 std 命名空间,在调用时使用 std::xxx 等方法。
代码
main.cpp
file.hpp
file.cpp
2. 完成从text.txt文件读取数据后,进行排序,再写入in.txt文件。数据量自行设定。
3. 请解决在主程序文件中加载多个头文件时,命名冲突问题。
解决方案
用随机生成函数生成数据写入文件流,
然后再读取文件流,讲数据存入 num[],排序,
将 num[] 中数据写入新文件,
不在全局打开 std 命名空间,在调用时使用 std::xxx 等方法。
代码
main.cpp
#include <iostream> #include <string> #include "file.hpp" int main(int argc, const char * argv[]) { int n; std::cin >> n; int *num = new int ; std::string text = "text.txt"; std::string in = "in.txt"; File f = File(text, n, num); f.randDate(); f.sortDate(); File f_ = File(in, n, num); f_.coutDate(); return 0; }
file.hpp
#ifndef file_hpp #define file_hpp #include <stdio.h> #include <string> #include <fstream> class File{ std::string fileName; // 文件名 int n; // 数据量 int *num;public: File(std::string fileName_, int n_, int *num_) : fileName(fileName_), n(n_), num(num_) {} void randDate(); // 生成随机数据文件 fileName void sortDate(); // 读取文件 fileName 中的随机序列并排序,存入 num void coutDate(); // 将 num 中数据存储到 fileName 文件中 int random(double st, double ed); // 生成 st~ed 随机数};#endif /* file_hpp */
file.cpp
#include "file.hpp" #include <algorithm> #include <ctime> #include <cstdlib> #define S 0 #define T 1000000// 生成随机数据文件void File::randDate() { std::fstream fp(fileName, std::ios::out); while (!fp) { fp.open(fileName, std::ios::out); } srand(unsigned(time(0))); int k = n; while (k--) { fp << random(S, T) << '\n'; } fp.close(); }// 读取数据文件,存入num,并排序void File::sortDate() { std::fstream fp(fileName, std::ios::in); while (!fp) { fp.open(fileName, std::ios::in); } int k = 0; while (fp >> num[k++]) {} std::sort(num, num + n); fp.close(); }// 将 num 中数据存入文件中void File::coutDate() { std::fstream fp(fileName, std::ios::out); while (!fp) { fp.open(fileName, std::ios::out); } for (int i = 0; i < n; i++) { fp << num[i] << '\n'; } fp.close(); }// 生成随机数,随机数在 st~ed 之内int File::random(double st, double ed) { return (int)st + (ed - st) * rand() / (RAND_MAX + 1.0); }
相关文章推荐
- Unix/Linux C++应用开发-C++结构体非面向对象特性
- H01 C++面向对象高级编程下作业解析
- 面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分
- 2017 程序设计实习之C++部分作业题汇总 - B:面向对象基础
- C++面向对象复习(四)——指针在面向对象中的应用
- Unix/Linux C++应用开发-C++结构体面向对象特性
- 面向对象课程 - 寒假第四次作业 - C++计算器项目计算部分
- C++面向对象作业1
- 面向对象程序设计--C++/Java
- 《面向对象基础:C++实现》学习笔记之七
- C++面向对象特性实现机制的初步分析 Part2
- 《面向对象基础:C++实现》学习笔记之五
- [关于面向对象]C++写的代码
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- 面向对象技术在开放式数控中的应用
- 面向对象程序设计--C++/Java
- 比较java和C++的面向对象语法
- C++面向对象特性实现机制的初步分析 Part1
- Java面向对象程序设计之接口应用
- C与C++部分不同(非面向对象部分)