c++如何文件中N行数据中随机抽取M行数据,并生成两个文件
时间: 2024-10-17 22:09:49 浏览: 25
生成随机中文姓名(C++)
5星 · 资源好评率100%
在C++中,你可以使用`fstream`库来读取文件并随机选择若干行,然后将这些选中的行写入到新的文件中。下面是一个简单的步骤说明:
首先,确保包含了必要的头文件:
```cpp
#include <iostream>
#include <fstream>
#include <cstdlib> // 需要用到rand()函数
#include <ctime> // 设置随机数种子
#include <vector>
```
接下来,创建一个函数来从文件中随机选择M行数据,并将它们写入新文件:
```cpp
void抽行(const std::string &inputFile, const std::string &outputFile, int M) {
// 打开输入和输出文件
std::ifstream inputFile(inputFile);
std::ofstream outputFile(outputFile);
if (!inputFile || !outputFile) {
std::cerr << "无法打开文件" << std::endl;
return;
}
std::vector<std::string> lines; // 存储读取的每一行
std::string line;
while (std::getline(inputFile, line)) {
lines.push_back(line);
}
inputFile.close(); // 关闭输入文件
// 初始化随机数生成器
srand(std::time(0));
// 从lines中随机抽取M行
std::vector<std::string> selectedLines(lines.begin(), lines.end());
std::random_shuffle(selectedLines.begin(), selectedLines.end());
// 写入新文件
for (int i = 0; i < M && i < selectedLines.size(); ++i) {
outputFile << selectedLines[i] << "\n";
}
outputFile.close(); // 关闭输出文件
std::cout << "成功抽取了 " << M << " 行并保存到了 " << outputFile.name() << std::endl;
}
```
要使用这个函数,只需传入源文件名、目标文件名以及要抽取的行数M:
```cpp
int main() {
const std::string inputFilePath = "input.txt";
const std::string outputFilePath = "output.txt";
int M = 5; // 抽取5行
抽行(inputFilePath, outputFilePath, M);
return 0;
}
```
阅读全文