作業要求 產生隨機資料檔案 text.txt。 從檔案 text.txt 中讀取資料後排序。 將排序好的資料寫入 in.txt 檔案。 解決在主程式檔案中載入多個標頭檔時,命名衝突問題。
解決方案 用隨機產生函數產生資料寫入檔案流, 然後再讀取檔案流,講資料存入 num[],排序, 將 num[] 中資料寫入新檔案, 不在全域開啟 std 命名空間,在調用時使用 std::xxx 等方法。
代碼
main.cpp
//// main.cpp// f-work2//// Created by ZYJ on 2017/3/14.// Copyright © 2017年 ZYJ. All rights reserved.//#include <iostream>#include <string>#include "file.hpp"int main(int argc, const char * argv[]){ int n; std::cin >> n; int *num = new int[n]; 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
//// file.hpp// f-work2//// Created by ZYJ on 2017/3/14.// Copyright © 2017年 ZYJ. All rights reserved.//#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
//// file.cpp// f-work2//// Created by ZYJ on 2017/3/14.// Copyright © 2017年 ZYJ. All rights reserved.//#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);}