fbpx
Skip to main content
  1. matteop82
  2. S.O.S. Computer
  3. Giovedì, 09 Dicembre 2004
  4.  Subscribe via email
Vi prego di aiutarmi sul main di questo progetto che non gira. Il problema è sul main e devo mantenere il get(c) invece di usare il più comodo <<
Grazie in inticipo x l'aiuto. Di seguito c'è il programma(io uso devc++)
In ingresso c'è un qualunque file di testo

#include <iostream.h>
#include <fstream.h>
using namespace std;
fstream file_da_leggere; // stream per leggere il file
char nome_del_file[32]; // stringa per ospitare il nome del file
// da leggere
struct elemento // questa e' la struttura dell'elemento della
{ char parola[100]; // lista
int occorrenza;
elemento* succ;
};
typedef elemento* lista; // tipo di dato da far restituire alle funzioni
// Questa procedura inserisce l'elemento preso al secondo argomento nella
// lista presa “per riferimento” al primo. L'inserimento avviene in
// maniera ordinata rispetto al campo “occorrenza” degli elementi
void inserisci_ordinato(lista& i, elemento e)
{
lista p = 0, q, r;
for (q = i; q != 0 && q->occorrenza > e.occorrenza; q = q->succ)
p = q;
r = new elemento;
*r = e;
r->succ = q;
// controlla se si deve inserire in testa
if (q == i) i = r;
else p->succ = r;
}
// Questa funzione restituisce il valore “true” se e solo se le stringhe
// contenute nei due vettori presi in input sono identiche
bool div(char vet1[], char vet2[])
{
for(int i=0; (vet1[i] != '\0') || (vet2[i] != '\0');i++)
if (vet1[i]!=vet2[i]) return true;
return false;
}
// Questa funzione estrae un elemento dalla lista presa per riferimento al
// primo argomento. L'elemento estratto e' quello la cui stringa contenuta
// nel suo campo “parola” è identica alla stringa contenuta nel campo
// “parola” dell'elemento preso pure per riferimento al secondo argomento
bool estrai_elem_dato(lista& i, elemento& e)
{
lista p = 0, q;
for (q = i; q != 0 && div(q->parola,e.parola); q = q->succ) p = q;
if (q == 0) return false;
if (q == i) i = q->succ;
else p->succ = q->succ;
e.occorrenza = q->occorrenza;
delete q;
return true;
}
// Questa procedura stampa la lista sullo standard output. La stampa
// avviene un elemento per riga, prima il numero di occorrenze e poi
// la parola
void stampaLista(lista p0)
{
lista p = p0;
while (p != 0)
{cout << p->occorrenza << ' ' << p->parola << '\n';
p = p->succ;
}
}
// questo e' il programma principale che deve:
// 1. chiedere quale sia il file di testo da elaborare
// 2. aprire il flusso in lettura
// 3. costruire ed aggiornare la lista delle parole con le relative
// occorrenze; la parola è un testo compreso fra due spazi
// 4. chiudere il flusso
// 5. stampare la lista sullo standard output
int main()
{
char c;
lista p0 = 0;
elemento appoggio;
int i=0, j=0;
cout << "Quale file vuoi analizzare?\n";
cin >> nome_del_file;
file_da_leggere.open(nome_del_file, ios::in);
while (file_da_leggere.get(c))
{
if (c!=' ')
{appoggio.parola[i]=c;
i++;
j=0;
}
else if (j=0)
{appoggio.parola[i]='\0';
if (estrai_elem_dato(p0,appoggio))
{
appoggio.occorrenza++;
inserisci_ordinato (p0,appoggio);
i=0;
}
else
{
appoggio.occorrenza=1;
inserisci_ordinato(p0,appoggio);
i=0;
}
appoggio.occorrenza=0;
appoggio.parola[i]='\0';
j=1;
}

}
file_da_leggere.close();
stampaLista(p0);
while(1);
return 0;
}
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Prova a fare #include<iostream> (senza ".h";) e vedi se gira...fammi sapere!
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 1
Accepted Answer Pending Moderation
No, non funziona lo stesso. Se riesci a darmi una soluzione te ne sarò infinitamente grato,.
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 2
  • Page :
  • 1


There are no replies made for this post yet.
Be one of the first to reply to this post!