使用数据文件对动态数组进行排序

时间:2015-04-25 23:12:38

标签: c++

我有一个赋值,我必须从一个名为(“random.txt”)的文件中读取输出总数并动态地将文件复制到一个数组中。然后对文件中的值进行排序。

直到第20行,我的程序运行正常并输出我的总值以及文件中的所有数字。

第21行也开始运行,但是当我运行它时它不会输出第20行中的总数,它也不会按顺序显示值。

java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

我知道我有很多错误,我对c ++很新,所以我还在努力学习。说实话,我不知道从第32行开始我在做什么。我知道我从24-31开始对数组进行排序,但我不知道如何将我的文件读入我的数组或如何格式化

3 个答案:

答案 0 :(得分:1)

您的阵列加载位置错误。它应该在排序之前,但在分配之后:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream fin("data.txt");
    double temp;
    size_t n = 0;

    while(fin >> temp)
    {
        std::cout << temp << ' ';
        ++n;
    }
    std::cout << "Total: "<< n << endl;

    fin.close();

    if (n > 0)
    {
        fin.open("data.txt");

        double *A = new double[n];
        for (int i=0; i<n && fin >> A[i]; ++i);

        fin.close();

        for (int i=0;i<n-1;i++)
        {
            for (int j=i;j<n;j++)
            {
                if (A[i]>A[j])
                {
                    int temp=A[i];
                    A[i]=A[j];
                    A[j]=temp;
                }
            }
        }

        for (int i=0; i<n; i++)
            cout << "Array[" << i << "]: " << A[i] << endl;

        delete [] A;
    }
}

老实说,有更好的方法来做到这一点。使用标准库容器,整个动物园减少到......

#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>

int main()
{
    std::ifstream fin("data.txt");

    std::vector<double> A{
        std::istream_iterator<double>(fin),
        std::istream_iterator<double>() };

    std::sort(std::begin(A), std::end(A));

    for (auto x : A)
        std::cout << x << '\n';
}

答案 1 :(得分:0)

您需要先为A的元素指定值,然后才能对A进行排序或读取!

答案 2 :(得分:0)

第24-31行的排序错位了。 A在第22和23行定义但从未初始化。我认为你打算在第21行重新开放之后从data.txt读取它,但你没有。