Programma contaparole

di il
2 risposte

Programma contaparole

Salve a tutti, vorrei un aiuto per questo programma:

il programma dovrebbe chiedere un file di testo contare quante volte una parola si presente e metterla in una lista... il programma che ho scritto è questo... c'è qualcuno che è in grado di aiutarmi per farlo funzionare??

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

struct struttura {
	char parola[30];
	int occorrenza;
	struttura* succ;
};
typedef struttura* lista;

// vorrei che questa procedura mi restituisse un vettore di caratteri
// in particolare il vettore appoggio che mi servirà per inserirlo in una
//lista;


char leggi_parola (char nomefile[]) {
	fstream input;
	char c;
	char appoggio[50];
	int i=0;
	input.open(nomefile,ios::in);
	while (!input.eof()) {
		while (c!=' ' && c!='.') {
			input.get(c);
			appoggio[i]=c;
		}
		return appoggio;
	}
	input.close();
}

void inserimento_ordinato(lista&inizio, struttura a) {
	lista p=0; q,r;
	for (q=inizio; q!=0;q=q->succ)  
		p=q;
		//qui vorrei confrontare la parola presa dal puntatotore q
		// e se esiste incrementare il conteggio, altrimenti creare un file in lista;
		
		if (strcmp(q->parola,a.parola)) *q.occorrenze++;
		else
		r=new struttura;
		*r=a;
		r->succ=q;
	    if (q=inizio) inizio=r;
	    else p->succ =r;
	}
	
	int main () {
		lista inizio=0;
		char filein [15];
		struttura e;
		
		cout << "Inserisci il file da aprire";
		cin >> filein;
		//qui l'intenzione è che finchè la funzione va, deve assegnare la parola
		//alla sruttura a che mi serve per metterla in lista
		
		while (leggi_parola(filein)) {
			a.parola= leggi_parola(filein);
			inserimento_ordinato(inizio,a);
		}
		return 0;
	}
	

grazie a tutti per l'aiuto"

2 Risposte

  • Re: Programma contaparole

    Nessuno che mi può aiutare?
  • Re: Programma contaparole

    
    char leggi_parola (char nomefile[])
    
    leggi_parola ti dovrebbe tornare un array di caratteri ma li stai faccendo tornare solo un carattere. poi non puoi far tornare un array che sta nello stack ovvero un array locale perche dopo l'uscita della funzione questo cessa di esistere.sarebbe stato meglio usare la classe std::string che non ha di questi problemi.
    
    string leggi_parola(char nomeFile[])
    
    Poi secondo me non ha senso quello che stai cercando di fare. la tua funzione non termina finche non abbia esaurito il file e il valore di i non viene mai incrementato quindi appoggio non so poi cosa conterrà all'interno. Un idea sarebbe quella di sfruttare l'operatore >> del iostream che estrrae le parole e li divide lui non appena trova uno spazio o una nuova riga quindi tutto si riduce a:
    
    std::string str;
    while(file >> str)
    {
       if(str.find('.') != std::string::npos) //vedo se la stringa contiene il carattere punto
        {
             std::stringstream ss(str);
             while(std::getline(ss,str,'.')) //finche riesci a spezzettare la stringa 
                   //inserisci stringa nella lista.
        }
        else //il punto non esiste nella stringa
            //inserisci stringa nella lista.
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte