使用 C++ 的最小 .txt
Minimum of a .txt with C++
我是 C++ 的真正新手,想问一个编码问题,
我想创建一个从文本文件中读取数据的 C++ 代码,对于每 K 行,它必须找到数组的最小值并将其报告到一个单独的文本文件中。例如,如果我有 1000 行并且 K 是 10 ,它必须寻找第一个 100 值并报告最小值,第二个 100 集并报告第二个最小值,然后继续...
我写了一个代码,但它不起作用,
任何帮助将不胜感激,
ifstream fin;
fin.open ("High.txt");
if ( !fin ) exit( 1 );
double **a = new double *[N];
for ( int i = 0; i < K; i++ )
{
a[i] = new double[N];
}
for ( int i = 0; i < K; i++ )
{
for ( int j = 0; j < N; j++ )
{
fin >> a[i][j];
}
}
double mx[N], mn[N];
int i,j,k;
for ( i =0; i<N ; i++){
mn[i] = a[0][i];
mx[i] = a[0][i];
for ( j = 1; j<K; j++){
if (mx[i] < a[j][i])
{mx[i] = a[j][i];}
if (a[j][i] < mn[i])
{mn[i] = a[j][i];}
}
}
ofstream ts("Max.txt", ios::app);
for ( i =0; i<N ; i++){
ts<<mx[i]<<endl;
}
ts.close();
}
#include<bits/stdc++.h>
using namespace std;
int main(){
ifstream fin;
ofstream fout;
int i=0,z,K=100,N=1000,x,j;
fout.open("High.txt");
//Generate 1000 positive random numbers below 1000 and print ino High.txt
for(i=0;i<1000;i++){
fout<<abs(random())%1000;
}
fout.close();
fin.open ("High.txt");
fout.open("out.txt");
if (!fin ) exit( 1 );
while(i<(N/K)){
z = 1000;
for(j=0;j<K;j++){ //Reading K line
fin>>x;
z = min(x,z);
}
fout<<z<<"\n";
i++;
}
fout.close();
fin.close();
fin.open("out.txt");
//Print result
while(!fin.eof()){
fin>>x;
cout<<x<<"\n";
}
}
//在 High.txt
中生成并打印了带有随机数的相同代码,它打印了正确的输出。我们打开文件时会出错。
您可以使用 std::min_element
获取最小值:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
std::ifstream infile("data.txt");
std::ofstream outfile("min_values.txt");
const int K = 10;
std::vector<double> numbers;
double d;
while(infile >> d)
{
numbers.push_back(d);
}
int full_parts = numbers.size() / K;
for (int i = 0; i < full_parts; i++)
{
double min = *std::min_element(numbers.begin() + i * K, numbers.begin() + i * K + K);
outfile << min << std::endl;
}
if (numbers.size() % K != 0)
{
double min = *std::min_element(numbers.begin() + full_parts * K, numbers.end());
outfile << min << std::endl;
}
}
我是 C++ 的真正新手,想问一个编码问题,
我想创建一个从文本文件中读取数据的 C++ 代码,对于每 K 行,它必须找到数组的最小值并将其报告到一个单独的文本文件中。例如,如果我有 1000 行并且 K 是 10 ,它必须寻找第一个 100 值并报告最小值,第二个 100 集并报告第二个最小值,然后继续...
我写了一个代码,但它不起作用,
任何帮助将不胜感激,
ifstream fin;
fin.open ("High.txt");
if ( !fin ) exit( 1 );
double **a = new double *[N];
for ( int i = 0; i < K; i++ )
{
a[i] = new double[N];
}
for ( int i = 0; i < K; i++ )
{
for ( int j = 0; j < N; j++ )
{
fin >> a[i][j];
}
}
double mx[N], mn[N];
int i,j,k;
for ( i =0; i<N ; i++){
mn[i] = a[0][i];
mx[i] = a[0][i];
for ( j = 1; j<K; j++){
if (mx[i] < a[j][i])
{mx[i] = a[j][i];}
if (a[j][i] < mn[i])
{mn[i] = a[j][i];}
}
}
ofstream ts("Max.txt", ios::app);
for ( i =0; i<N ; i++){
ts<<mx[i]<<endl;
}
ts.close();
}
#include<bits/stdc++.h>
using namespace std;
int main(){
ifstream fin;
ofstream fout;
int i=0,z,K=100,N=1000,x,j;
fout.open("High.txt");
//Generate 1000 positive random numbers below 1000 and print ino High.txt
for(i=0;i<1000;i++){
fout<<abs(random())%1000;
}
fout.close();
fin.open ("High.txt");
fout.open("out.txt");
if (!fin ) exit( 1 );
while(i<(N/K)){
z = 1000;
for(j=0;j<K;j++){ //Reading K line
fin>>x;
z = min(x,z);
}
fout<<z<<"\n";
i++;
}
fout.close();
fin.close();
fin.open("out.txt");
//Print result
while(!fin.eof()){
fin>>x;
cout<<x<<"\n";
}
}
//在 High.txt
中生成并打印了带有随机数的相同代码,它打印了正确的输出。我们打开文件时会出错。
您可以使用 std::min_element
获取最小值:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
std::ifstream infile("data.txt");
std::ofstream outfile("min_values.txt");
const int K = 10;
std::vector<double> numbers;
double d;
while(infile >> d)
{
numbers.push_back(d);
}
int full_parts = numbers.size() / K;
for (int i = 0; i < full_parts; i++)
{
double min = *std::min_element(numbers.begin() + i * K, numbers.begin() + i * K + K);
outfile << min << std::endl;
}
if (numbers.size() % K != 0)
{
double min = *std::min_element(numbers.begin() + full_parts * K, numbers.end());
outfile << min << std::endl;
}
}