Programma: problema per doppio carattere su file in uscita

di il
1 risposte

Programma: problema per doppio carattere su file in uscita

Salve a tutti! Sto lavorando su un programma che dovrebbe:

1) Leggere un file di testo
2) Contare tutti i caratteri in esso contenuto
3) creare 2 file di testo, uno contenente il testo originale, il secondo contenente il conteggio di tutti i caratteri presenti nel testo

Tutto sembra funzionare, tranne per un difetto: l'ultimo carattere del testo originale viene ripetuto una singola volta. Qualcuno riesce a svelarmi l'arcano?
#include <iostream>
#include <fstream>
#include <cctype>

using namespace std;

void inizialize (int list[]); 												//funzione per inizializzazione array
void letterCount(char ch, int list[], int& space);										//funzione per conteggio lettere del file di testo
void copytxt(int list[], char& ch, ifstream& inText, ofstream& outText, int& space); 	//funzione per copiatura del file di testo
void lettersList(int list[], ofstream& outText, int space); 							//funzione per stampa di file di testo contenente il conteggio lettere

const int ARRAY_SIZE=26;													//costante che definisce la dimensione dell'array contenente il conteggio lettere

int main() 																	//funzione principale

{

ifstream inFile; 															//inizializzazione variabili per gestione dei file di ingresso ed uscita
ofstream outFile;
ofstream outLetters;

int numberLetter[ARRAY_SIZE];												//inizializzazione array che conterrà il conteggio delle lettere
int space=0;																//contatore del carattere ' '
char ch;																	//inizializzazione del carattere che verrà utilizzato per manipolare i caratteri dei file di entrata e uscita


inFile.open("textin.txt");													//apertura file di ingresso
if(!inFile)																	//sistema di controllo file
{
cout << "Wrong file, aborting program." <<endl;
return 1;
}
outFile.open("textout.txt", ios::app);										//apertura file di uscita
outLetters.open("textletters.txt", ios::app);

inizialize(numberLetter);													//inizializzazione array

inFile.get(ch);																//il programma ottiene il primo carattere del file di ingresso

while(inFile)																//ciclo che copia il file di testo in ingresso in uno di uscita tramite la funzione copytxt
{

copytxt(numberLetter, ch, inFile, outFile, space);

}

lettersList(numberLetter, outLetters, space);								//uso della funzione letterList per creare il file di testo contenente il conteggio lettere

inFile.close();																//chiusura di tutti i file
outFile.close();
outLetters.close();

return 0;																	//fine programma

}

void inizialize (int list[])												//funzione di inizializzazione array

{
for(int a=0; a<ARRAY_SIZE; a++)
{
list[a]=0;
}
}

void letterCount(char ch, int list[], int& space)							//funzione di conteggio lettere

{

int index=0;
ch=toupper(ch);
index=static_cast<int>(ch)-static_cast<int>('A');
if(index>=0 && index<ARRAY_SIZE)
list[index]++;
if(index==-33)
space++;

}

void copytxt(int list[], char& ch, ifstream& inText, ofstream& outText, int& space)		//funzione di copiatura del testo

{

while(ch!='\n' && inText)

{

outText << ch;
letterCount(ch, list, space);															//all'interno della funzione viene richiamata la funzione letterCount all'interno di un ciclo while
inText.get(ch);

}
outText << ch;
inText.get(ch);
}

void lettersList(int list[], ofstream& outText, int space)								//funzione che crea il file di testo contenente il conteggio lettere
{

for(int index=0; index<26; index++)
outText << static_cast<char>(index+65) << " is present " << list[index] << " times." << endl;
outText << "' ' is present " << space << " times." << endl;
}

1 Risposte

  • Re: Programma: problema per doppio carattere su file in uscita

    Inizia a leggere il regolamento. Sezione 4: Formattazione del codice.
    4. Formattare il codice sorgente
    Visto gli argomenti trattati in questo forum vengono spesso inseriti stralci di codice sorgente.
    Per rendere facilmente leggibile tale codice bisogna formattarlo utilizzando il pulsante "Code".
Devi accedere o registrarti per scrivere nel forum
1 risposte