PDA

Visualizza la versione completa : [C++]Ordianare un file


SkOrPiOn`87
14-07-2004, 18:01
Ciao, ho un file .txt con un variabile numero di dati dentro, strutturati in questo modo:

Nome Anni
Nome Anni
...

Tramite c++ dovrei ordianre in ordine albetico il file .txt

Qualcuno sa consigliarmi in che modo potrei fare questo lavoro?

:ciauz:

kNemo
14-07-2004, 19:30
Quello che defi fare e' mettere il file un un buffer...
(Mettilo in una lista...)
Ordini la lista
Apri il file in Scrittura cancellando il precedente
Salvi la lista ordinata nel file...

SkOrPiOn`87
15-07-2004, 03:11
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>

int main()
{
fstream amici;
char tempnome[50];
int tempanni, row=0, collum=0;

//Aprimao lo stream per contare gli utenti...
amici.open("C:\\Documents and Settings\\federico\\Documenti\\lavori c++\\vacanze\\01\\amici.txt", ios::in );

if (!amici) {
cerr << "Impossibile aprire il file\n";
}

while (amici >> tempnome >> tempanni) {
row++; //Vediamo quanti nomi ci sono...
if (strlen(tempnome) > collum) collum = strlen(tempnome);
}
amici.close();


//Dichiariamo gli array che conterrano i dati, dopo aver stabilito le dimensioni da darli...
char nome[row][collum], temp[collum];
int anni[row], i=0, k, temp2;

amici.open("C:\\Documents and Settings\\federico\\Documenti\\lavori c++\\vacanze\\01\\amici.txt", ios::in );

if (!amici) {
cerr << "Impossibile aprire il file\n";
}

while (amici >> nome[i] >> anni[i])
i++;
amici.close();

//Ordiniamo l'array
for (i=0; i<row-1; i++)
for (k=0; k<row-1; k++)
if (anni[k] > anni[k+1]) { //Cambiamo l'età ed il nome...
strcpy(temp,nome[k]);
strcpy(nome[k],nome[k+1]);
strcpy(nome[k+1],temp);

temp2 = anni[k];
anni[k] = anni[k+1];
anni[k+1] = temp2;
}

//Adesso mostriamo gli utenti in ordine alfabetico...
for (i=0; i<row; i++)
cout << nome[i] << " " << anni[i] << endl;

system("PAUSE");
return 0;
}


Viste le mie basse conoscenza del c++ limitate alòle basi, sono riuscito a fare solamente questo, (il codice funziona). Però qualcuno può dirmi se è brutto (lento), o farmi qualche altra critica per migliorare il codice? :ciauz:

Loading