|
|
|
 |
|  |
 |
Flyzone |
[INFORMATICA] conteggio stringhe ripetute (C) |
28-01-2004 01:43 |
|
 |
Flyzone |
.coltellino:svizzero.
Registered: Jan 2003
Posts: 1956 (0.24 al dì)
Location:
Corso:
Anno:
Time Online: 19 Days, 22:20:19 [...]
Status: Offline
Edit | Report | IP: Logged |
[INFORMATICA] conteggio stringhe ripetute (C)
Help...mi ritrovo un file di testo di lunghezza massima N, con un tot di stringhe ripetute;
devo contare per ogni parola, quante volte è ripetuta...
Non mi viene in mente un algoritmo decente...o per meglio dire non sò come non far ricontare la stessa parola quando con fseek ritorno al punto di partenza... uffff odio il C per queste cose!
Stò usando fgets fprintf su di un file in input (in sola lettura) e uno in output.
E' per uso personale, non fa parte di nessun progetto della nostra uni (almeno x quel che ne sò io!)
P.S: da evitare esplicitamente puntatori, array bidimensionali, alberi, il file non è ordinato e sopratutto non si possono usare funzioni del C++ (la ucciderei certa gente)
|
28-01-2004 01:43 |
|
|
|  |
 |
Hamelin |
Non puoi salvare ogni stringa già contata in un a ... |
28-01-2004 08:34 |
|
 |
Hamelin |
.pifferaio.magico.

Registered: Feb 2003
Posts: 662 (0.08 al dì)
Location: ..tra i monti intorno ad Hamelin..
Corso: Ingegneria Informatica
Anno: 3°
Time Online: 7 Days, 7:19:55 [...]
Status: Offline
Edit | Report | IP: Logged |
Non puoi salvare ogni stringa già contata in un array e prima di ogni fseek fare un bel strcmp? Non ho idea di come funzioni fseek perché non l'ho mai usata, quindi potrei dire una marea di str****te....
__________________
Bjarne Stroustrup: "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone."
Andrew S. Tanenbaum: "Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway."
Edsger Dijkstra: "Computer Science is no more about computers than astronomy is about telescopes."
Robert Firth: "One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs."
Donald Knuth: "A mathematical formula should never be 'owned' by anybody! Mathematics belong to God."
|
28-01-2004 08:34 |
|
|
|  |
 |
Flyzone |
[QUOTE][i]Originally posted by Hamelin [/i]
... |
28-01-2004 09:32 |
|
 |
Flyzone |
.coltellino:svizzero.
Registered: Jan 2003
Posts: 1956 (0.24 al dì)
Location:
Corso:
Anno:
Time Online: 19 Days, 22:20:19 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Hamelin
strcmp?
ma non confrontava due stringhe e basta?
Cioè se strcmp(s1,s2)=0 le stringhe sono uguali altrimenti sono diverse..non mi dice se è _contenuta_ ...
Avrei qualcosa come
ciao sono un gatto nero gatto
come la pece ciao
mi dovrebbe ridare un:
ciao 2
gatto 2
sono 1
pece 1
(etc....)
|
28-01-2004 09:32 |
|
|
|  |
 |
Hamelin |
Ma fseek cosa fa esattamente? ... |
28-01-2004 10:11 |
|
 |
Hamelin |
.pifferaio.magico.

Registered: Feb 2003
Posts: 662 (0.08 al dì)
Location: ..tra i monti intorno ad Hamelin..
Corso: Ingegneria Informatica
Anno: 3°
Time Online: 7 Days, 7:19:55 [...]
Status: Offline
Edit | Report | IP: Logged |
Ma fseek cosa fa esattamente?
__________________
Bjarne Stroustrup: "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone."
Andrew S. Tanenbaum: "Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway."
Edsger Dijkstra: "Computer Science is no more about computers than astronomy is about telescopes."
Robert Firth: "One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs."
Donald Knuth: "A mathematical formula should never be 'owned' by anybody! Mathematics belong to God."
|
28-01-2004 10:11 |
|
|
|  |
 |
Flyzone |
[QUOTE][i]Originally posted by Hamelin [/i]
... |
28-01-2004 10:46 |
|
 |
Flyzone |
.coltellino:svizzero.
Registered: Jan 2003
Posts: 1956 (0.24 al dì)
Location:
Corso:
Anno:
Time Online: 19 Days, 22:20:19 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Hamelin
Ma fseek cosa fa esattamente?
se scorri uno stream, la fseek ti permette di posizionarti in una determinata posizione, solitamente viene utilizzata per "riavvolgere" lo stream 
|
28-01-2004 10:46 |
|
|
|  |
 |
Hamelin |
Ma se tu facessi così, invece?: apri il file in l ... |
28-01-2004 10:50 |
|
 |
Hamelin |
.pifferaio.magico.

Registered: Feb 2003
Posts: 662 (0.08 al dì)
Location: ..tra i monti intorno ad Hamelin..
Corso: Ingegneria Informatica
Anno: 3°
Time Online: 7 Days, 7:19:55 [...]
Status: Offline
Edit | Report | IP: Logged |
Ma se tu facessi così, invece?: apri il file in lettura e usando fgets di leggi una dopo
l'altra tutte le parole del file (senza doverlo leggere più volte)... memorizzi la prima
parola in una struct semplicissima che presenta due attributi (un char[] per memorizzare
la stringa di lettera della parola e un int per il numero di occorrenze); dopo di che
per la parola successiva, confronti quello che ti ritorna il fgets con la stringa salvata
nella struct: se è uguale aggiugi 1 al numero di occorrenze, se è diverso costruisci una
nuova struct contenente la nuova parola; alla lettura successiva dovrai usare strcmp con
entrambe le stringhe contenute nelle due struct e così via... naturalmente non è il
massimo della velocità perché è pieno di cicli... ma è semplice e credo che funzioni.
__________________
Bjarne Stroustrup: "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone."
Andrew S. Tanenbaum: "Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway."
Edsger Dijkstra: "Computer Science is no more about computers than astronomy is about telescopes."
Robert Firth: "One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs."
Donald Knuth: "A mathematical formula should never be 'owned' by anybody! Mathematics belong to God."
|
28-01-2004 10:50 |
|
|
|  |
 |
Lord_Tom |
Sono d' accordo con Hamelin.
... |
28-01-2004 11:57 |
|
 |
Lord_Tom |
gentiluomo

Registered: Dec 2001
Posts: 177 (0.02 al dì)
Location: PAVIA
Corso: laurea quinquennale info
Anno: 5
Time Online: 2 Days, 0:17:35 [...]
Status: Offline
Edit | Report | IP: Logged |
Sono d' accordo con Hamelin.
Tuttavia non pensare troppo all' ottimizzazione, se il file che devi processare non è lungo diversi mega bytes.
Un' alternativa è usare un file che memorizza le parole e i relativi contatori.
non guardare la sintassi che è orribile e sbagliata, ma il concetto sottostante
Quindi (scrivo in un pseudo c )
while (!EOF)
{
String mystring = GiveMeNextString();
if (ThisIsNewString(mystring))
{
Myfileadd(mystring);
Myfileadd((char) 0); /* non mi ricordo molto del c come puoi notare... */
}
else {
int posizione = Myfileselect(mystring);
Myfileincrementcount (posizione);
}
/* ora leggiti il file */
}
boolean ThisIsNewString (String mystring)
{
/* scorri il file esaminando ogni stringa
e facendo una strcmp */
if... return true;
return false;
}
|
28-01-2004 11:57 |
|
|
|  |
 |
Flyzone |
[QUOTE][i]Originally posted by Hamelin [/i]
... |
28-01-2004 22:04 |
|
 |
Flyzone |
.coltellino:svizzero.
Registered: Jan 2003
Posts: 1956 (0.24 al dì)
Location:
Corso:
Anno:
Time Online: 19 Days, 22:20:19 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Hamelin
Ma se tu facessi così, invece?: apri il file in lettura e usando fgets di leggi una dopo l'altra tutte le parole del file (senza doverlo leggere più volte)
Buona l'idea delle struct, ma la fregatura è che fgets piglia una stringa (si ferma al '\n') e non una parola, ed una riga è lunga all'incirca 5000 caratteri [...].
stavo pensando al fgetc, ma mi ritrovo in cicli e sottocicli cmq...sono a due pagine di roba ufff 
Lo ammetto, in questo caso rimpiango amaramente di non poter usare il visual basic, in 10 minuti era fatto 
Openoffice ha mica una funzione di conteggio delle parole? Hum e avrà mica i sorgenti? 
|
28-01-2004 22:04 |
|
|
|  |
 |
Hamelin |
...sicuro che fgets si ferma a /n e non a /0? Foss ... |
29-01-2004 08:31 |
|
 |
Hamelin |
.pifferaio.magico.

Registered: Feb 2003
Posts: 662 (0.08 al dì)
Location: ..tra i monti intorno ad Hamelin..
Corso: Ingegneria Informatica
Anno: 3°
Time Online: 7 Days, 7:19:55 [...]
Status: Offline
Edit | Report | IP: Logged |
...sicuro che fgets si ferma a /n e non a /0? Fossi in te controllerei... bye!
__________________
Bjarne Stroustrup: "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone."
Andrew S. Tanenbaum: "Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway."
Edsger Dijkstra: "Computer Science is no more about computers than astronomy is about telescopes."
Robert Firth: "One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs."
Donald Knuth: "A mathematical formula should never be 'owned' by anybody! Mathematics belong to God."
|
29-01-2004 08:31 |
|
|
|  |
 |
Ryudo |
[QUOTE]
... |
29-01-2004 08:37 |
|
 |
Ryudo |
.precettore.

Registered: Apr 2003
Posts: 85 (0.01 al dì)
Location: Arcore
Corso: Informatica
Anno: 1
Time Online: 3 Days, 8:05:43 [...]
Status: Offline
Edit | Report | IP: Logged |
Openoffice ha mica una funzione di conteggio delle parole? Hum e avrà mica i sorgenti? [/B]
fai prima a scaricarti le coreutils dal sito di gnu e guardarti i sorgenti di wc 
|
29-01-2004 08:37 |
|
|
|  |
 |
DeepBlue |
[QUOTE][i]Originally posted by Flyzone [/i]
... |
29-01-2004 14:45 |
|
 |
DeepBlue |
tired guy

Registered: Sep 2003
Posts: 4258 (0.54 al dì)
Location: CSN
Corso: Info tlc
Anno:
Time Online: 52 Days, 8:40:31 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Flyzone
Buona l'idea delle struct, ma la fregatura è che fgets piglia una stringa (si ferma al '\n') e non una parola, ed una riga è lunga all'incirca 5000 caratteri [...].
stavo pensando al fgetc, ma mi ritrovo in cicli e sottocicli cmq...sono a due pagine di roba ufff 
Lo ammetto, in questo caso rimpiango amaramente di non poter usare il visual basic, in 10 minuti era fatto
VB ??? 
Cmq con fgets e fseek, con un paio di cicli forse la cosa si risolve. Forse...
Dato che e` una funzione che mi servira` per il prossimo progettino, ora provo a buttare giu` qualcosa.
Ma perche` non vuoi usare i puntatori? Sono specifiche di progetto (naaaa) o ti inorridiscono? :rolleyes:
__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~
|
29-01-2004 14:45 |
|
|
|  |
 |
|  |
 |
DeepBlue |
[QUOTE][i]Originally posted by Gwath [/i]
... |
29-01-2004 16:27 |
|
 |
DeepBlue |
tired guy

Registered: Sep 2003
Posts: 4258 (0.54 al dì)
Location: CSN
Corso: Info tlc
Anno:
Time Online: 52 Days, 8:40:31 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Gwath
una bella funzione di hash??? così se non c'è la parola la metti nella tabella di hash, se c'è aumenti un contatore di 1... (troppo complicato???)
Deve cmq leggere il file parola per parola, o carattere per carattere e poi costruire l'hash table. Non gli conviene 
E poi gli stream non sono oggetti legati al C++ (iostream per l'i/o standard e fstream per l'i/o con files???)
mmm generalmente in C si definisce stream una sorgente o una destinazione di dati.
In C++ nin zo
__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~
|
29-01-2004 16:27 |
|
|
|  |
 |
Gwath |
[QUOTE][i]Originally posted by DeepBlue [/i]
... |
29-01-2004 19:20 |
|
|
|  |
 |
All times are GMT. The time now is 02:28. |
|
|
 |
|
 |
|
|
|  |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|