Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++]Ordianare un file

  1. #1

    [C++]Ordianre un file

    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?


  2. #2
    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...
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  3. #3
    codice:
    #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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.