Scrittura di un insieme di stringe su un file

di il
5 risposte

Scrittura di un insieme di stringe su un file

Salve ragazzi. Ho creato un programma che permette di leggere da file una lista di elementi (stringhe) terminata da $ e disporla in ordine alfabetico in un nuovo file di destinazione.
Ecco un esempio della lista:

Elemento1
Elemento2
...
ElementoN
$

Il programma legge il file e mette tutti gli elementi dentro un oggetto che rappresenta un insieme di stringhe.
Una volta effettuata questa operazione, da la possibilità di inserire un ulteriore elemento. Il problema è che una volta inserito l' elemento e scritto nel file di destinazione questo non va a capo, a differenza di tutti gli elementi del file. Esempio del problema:

Elemento1
Elemento2
ElementoInserito Elemento3
...

Sapete come potrei risolvere? Vi allego il main e la classe

Main

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include "classGestione.cpp"
using namespace std;

int main(){
	
	char Carattere, NomeFile[36], CopiaFilm[64];
	string NomeFilm = "", CopiaFile = "";
	FilmVisti Lista;
	
	cout << "Inserire nome del file di input (max 32 caratteri): ";
	cin.getline(NomeFile, 32, '\n');
	
	strcat(NomeFile, ".txt");
	ifstream file;
	file.open(NomeFile);
	
	if(file.fail()){
		cout << "ERRORE: nome del file errato." << endl;
		return 420;
	}
		
	Carattere = file.get();
	while(!file.eof()){
		CopiaFile += Carattere;
		Carattere = file.get();
	}
	
	file.close();
	
	remove(NomeFile);
	
	for(int IndiceCarattere = 0; IndiceCarattere < CopiaFile.size(); IndiceCarattere++){
		
		if(CopiaFile[IndiceCarattere] == '$') break;
		
		NomeFilm += CopiaFile[IndiceCarattere];
		
		if(CopiaFile[IndiceCarattere] == '\n'){
			Lista.aggiungi(NomeFilm);
			NomeFilm = "";
		}
	}
	
	
	ofstream Risultato;
	Risultato.open(NomeFile);
	int scelta;
	cout << "Vuoi aggiungere un film alla lista? (1/0): ";
	cin >> scelta;
	
	while(scelta != 1 && scelta != 0){
		cout << "ERRORE: ripetere l'inserimento (1/0): ";
		cin >> scelta;
	}
	
	switch(scelta){
		case 1:
			NomeFilm="";
			cin.clear();
			cin.ignore(256, '\n');
			cout << "Inserire il nome del film: ";
			getline(cin, NomeFilm, '\n');
			Lista.aggiungi(NomeFilm);
			
			cout << "Operazione effettuata." << endl;
			break;
		
		case 0:
			cout << "Proseguo alla terminazione del programma." << endl;
			break;
	}
	
	Lista.ordina();
	
	for(int i = 0; i <= Lista.dimensione(); i++){
		NomeFilm = Lista.elemento(i);
		Risultato << NomeFilm;
	}
	
	Risultato << "$ <= NON CANCELLARE QUESTO SIMBOLO\n\nLa lista contiene attualmente " << Lista.dimensione() << " film.";
	Risultato.close();
	
	cout << "Operazione di ordinamento del file " << NomeFile << " eseguita con successo!" << endl;
	cout << "Premere il tasto invio per terminare il programma." << endl;
	cin.clear();
	cin.ignore(256, '\n');
	Carattere = cin.get();
	
	
	return 420;
}
Classe

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

class FilmVisti{
	
	private:
		string ListaFilm[1000];
		int NumeroElementi;
		
	public:
		
		FilmVisti(){	
			for(int i = 0; i < 1000; i++) ListaFilm[i] = "";
			NumeroElementi = 0;
		}
		
		FilmVisti(string CopiaLista[], int CopiaNumero){	
			int c = CopiaNumero;
			
			for(int i = 0; i < CopiaNumero; i++){
				
				if(contiene(CopiaLista[i])) c--;
				
				aggiungi(CopiaLista[i]);
			}
			
			NumeroElementi = c;
		}
		
		void aggiungi(string film){
			if(NumeroElementi == 1000){
				
				cout << "Spazio non sufficiente.";
				return;
			}
			if(contiene(film)){
				
				cout << film << " già presente nella lista.";
				return;
			}
			
			NumeroElementi++;
			ListaFilm[NumeroElementi] = film;
			return;
		}
		
		bool contiene(string film) const{
			for(int i = 0; i < NumeroElementi; i++)
				if(ListaFilm[i] == film) return true;
			
			return false;
		}
		
		int dimensione() const{
			return NumeroElementi;
		}
		
		string elemento(int i) const{
			return ListaFilm[i];
		}
		
		void ordina(){
			string CopiaFilm;
			for(int i = 0; i <= NumeroElementi; i++)
				for(int j = i; j <= NumeroElementi; j++)
					if(ListaFilm[i] > ListaFilm[j]){
						CopiaFilm = ListaFilm[j];
						ListaFilm[j] = ListaFilm[i];
						ListaFilm[i] = CopiaFilm;
					}
		}
			
};

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte