簡體   English   中英

如何在文本文件中保存排序的數組?

[英]how to save the sorted arrays in textfile?

我有一個對數組排序的程序,如何保存在文本文件中? 例如:排序后的數組是:1、2、3、4、5。我如何保存在名為的文本文件中。 我嘗試了很多方法,但是排序后的數組無法保存在文本文件中。我是新手,所以很難。

這是我的代碼。

#include <iostream>
using namespace std;

int main() {
    cout << "Enter number of element:";
    int n; cin >> n;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cout << "element number " << (i+1) << " : ";
        cin >> a[i];
    }
    int e=1, d=3;
    int i, j, k, m, digit, row, col;
    int length = sizeof(a)/sizeof(int);
    int bmat[length][10];
    int c[10];
    for(m=1;m<=d;m++)
    {
        for(i=0;i<10;i++)
        {
            c[i]=-1;
        }
        for(i=0;i<length;i++)
        {
            digit=(a[i]/e)%10;
            c[digit]++;
            row=c[digit];
            col=digit;
            bmat[row][col]=a[i];
        }
        k=-1;
        for(i=0;i<10;i++)
        {
            if(c[i]!=-1)
            {
                for(j=0;j<=c[i];j++)
                {
                k++;
                a[k]=bmat[j][i]; 
                }
            }
        }
        e=e*10;
    }

    cout << endl;
    cout << "Sorted array:" << endl;
    for(int i=0;i<n;i++)
    {
        cout << a[i] << " , ";
    }
    cout << endl;
    system("pause");
    return 0;
}
//Use this code 

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



int main()
{

    int n = 0; 
    cout << "Enter number of element:";
    cin >> n;

    //Data Structure
    std::vector<int> list;
    //push back element in vector
    for(register int i=0;i<n;++i)
        list.push_back(rand()%10 + 1);

    //do shuffling before sorting because rand() generates increasing order number
    std::random_shuffle(list.begin(),list.end());

    std::sort(list.begin(),list.end());

    ofstream textfile;
    textfile.open ("E:\\example.txt");
    for(size_t i= 0;i<list.size();++i)
        textfile << list[i] <<" ";

    textfile.close();
}

如果可以將排序后的數組寫入std::cout ,則可以將其寫入文件。 在C ++中,控制台與文件相同。

把它放在main的末尾:

 cout << "Sorted array:" << endl;
 print_array( std::cout, a, n ); // Show the results to the user.

 std::ofstream save( "array.txt" ); // Open a new file (or overwrite).
 print_array( save, a, n ); // Save the results for later.

 system("pause");
 return 0;
}

並將打印代碼置於新功能中,該功能可以在main之前定義:

void print_array( std::ostream & s, int * a, int n ) {
 for(int i=0;i<n;i++)
 {
  s << a[i] << " , ";
 }
 s << endl;
}
#include<iostream>
#include<fstream>
using namespace std;

int compare(int, int);
void sort(int[], const int);
int compare(int x, int y){
    return(x > y);
}
void swap(int *x, int *y){
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
void display(int array[], int n){
    for (int i = 0; i<n; i++) {
        cout << array[i] << " ";
    }
    cout << endl;
}
void writeToFile(int array[], int n){
    ofstream myfile;
    myfile.open("example.txt");
    for (int i = 0; i<n; i++) {
        myfile << array[i];
        if (i != n - 1){
            myfile << ", ";
        }
    }
    myfile.close();
}
void sort(int table[], const int n) {
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n - 1; j++) {
            if (compare(table[j], table[j + 1]))
                swap(&table[j], &table[j + 1]);
        }
    }
}
int main(){
    int quantity;
    int* tab;
    ofstream outfile;
    cout << "Enter number of element: ";
    cin >> quantity;
    tab = new int[quantity];
    cout << "Element:\n\n" << endl;
    for (int i = 0; i < quantity; i++){
        int x = i;
        cout << "#" << ++x << ":";
        cin >> tab[i];
    }
    sort(tab, quantity);
    cout << "The Sorted Elements are: ";

    display(tab, quantity);
    writeToFile(tab, quantity);
    cout << endl;
    getchar();
    getchar();
    //system("pause");
    return 0;
}

簡而言之,將此塊添加到您的代碼中:

ofstream myfile;
myfile.open("example.txt");
for (int i = 0; i<n; i++) {
    myfile << array[i];
    if (i != n - 1){
        myfile << ", ";
    }
}
myfile.close();

您可以使用C ++ fstream類,因為要輸出,因此可以在此處使用ofstream。 您應該只用ofstream實例替換一些“ cout”:

在代碼開頭聲明:

ofstream ofs("./sorted_elem.txt", ofstream::out);

要輸出時:

    ofs << "Sorted array:" << endl;

    for(int i=0;i<n;i++)
    {
        ofs << a[i] << " , ";
    }
    ofs << endl;

在C ++中,您確實想使用std::vector或其他一些不錯的容器來存儲數字數組。 要將數組寫入文件,您需要打開文件並將每個元素單獨寫入文件(全部未經測試)。

#include <fstream>

int main()
{
  std::ofstream fp("output.txt");
  int data[5]; // todo: fill

  for (unsitned i = 0; i < 5; ++i)
  {
    fp << data[i] << ' ';
  }
}

並再次閱讀:

#include <fstream>

int main()
{
  std::ifstream fp("output.txt");

  // todo: Determine the size of the array or guess it (don't guess it!)
  unsigned array_size = 5;
  int data[array_size];

  int n = 0;
  while (fp.good() && n < array_size) fp >> data[n++];
}

但是因為我們使用的是C ++,所以我們可以使用std::vector

#include <fstream>
#include <vector>

int main()
{
  std::vector<int> me(5); // todo: fill

  std::ofstream fp("output.txt");

  for (size_t i = 0; i < me.size(); ++i) fp << me[i] << ' ';

  // C++11: for (int d : me) fp << d << ' ';
}

和,

#include <fstream>
#include <vector>

int main()
{
  std::ifstream fp("output.txt");

  std::vector<int> data;
  double buf;
  while (fp >> buf) data.push_back(buf);  // no longer need to guess
}

我認為,到目前為止,此處尚未展示復制選項。

請檢查此代碼。 (假設您的向量可以使用了,我已經跳過了)。

該示例使用C數組和向量。 請盡可能在代碼中使用更高版本。 但是,對於復制功能,兩者都起作用:

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

int main () {

  int a[10]={0,1,2,3,4,5,6,7,8,9};  
  std::vector<int> v; for (int i=0; i<10; ++i)v.push_back(i*10); //0, 10, 20,...

  std::ofstream fs_a( "c:/temp/out_a.txt" );
  //store space separated
  std::copy ( a, a+sizeof(a)/sizeof(a[0]), std::ostream_iterator<int>( fs_a, " ") );

  //store coma-separated, as one-liner  
  std::copy ( v.begin(), v.end() ), std::ostream_iterator<int>( std::ofstream( "c:/temp/out_v.txt" ), ",") );
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM