2015-01-15 4 views
0

У меня есть программа, которая сортировала массивы, как я могу сохранить в текстовом файле? например: отсортированные массивы: 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; 
} 
+1

Сериализация - это один из способов. –

+0

открыть файл и написать ему. Вы можете использовать функцию сортировки от для сортировки. – saadtaame

+2

'int a [n];' когда 'n' не является постоянным выражением * не * стандартным C++. Вместо этого вы, вероятно, должны использовать 'std :: vector'. – crashmstr

ответ

0
#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(); 
0

вы можете использовать C++ класс fstream, так как вы хотите вывести, вы можете использовать ofstream здесь следует просто заменить некоторые "СоиЬ" с ofstream например:

В начале состояния Исходный код:

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

Когда требуется вывести:

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

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

В 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 
} 
1

Если вы можете напишите отсортированный массив до 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; 
} 
2
//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(); 
} 
+0

Это традиционно для 'srand' перед' rand', но 'rand''s [days] (http://www.open-std.org/jtc1/sc22/wg21/ документы/документы/2013/n3775.pdf) являются [пронумерованы] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3841.pdf). – Potatoswatter

+0

Спасибо @Potatoswatter Это полезный документ. –

0

думаю, копия не была продемонстрирована здесь.

Проверьте этот код. (Предполагая, что ваш вектор готов к использованию, я пропустил его).

В примере используется 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; 
} 
Смежные вопросы