作业要求
- 生成随机数据文件 text.txt。
- 从文件 text.txt 中读取数据后排序。
- 将排序好的数据写入 in.txt 文件。
- 解决在主程序文件中加载多个头文件时,命名冲突问题。
解决方案
- 用随机生成函数生成数据写入文件流,
- 然后再读取文件流,讲数据存入 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[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
#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();
void sortDate();
void coutDate();
int random(double st, double 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();
}
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();
}
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();
}
int File::random(double st, double ed)
{
return (int)st + (ed - st) * rand() / (RAND_MAX + 1.0);
}