Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100

    [C]creare file indice NO PAROLE DOPPIA

    ciao avrei un problema,
    devo implementare un programma che dato un file A stampi su un file index.txt tutte le parole presenti nel file A col seguente formato *parola1*parola2* scrivendo la parola su index solo se non l ho gia scritto
    chiarisco con un esempio
    file A:
    ciao luca come stai
    ciao matteo come stai
    io bene ciao ciao ciao

    file index(contiene tutte le parole presenti in file A senza i doppioni):
    *ciao*luca*come*stai*matteo*io*bene*


    vi spiego il mio problema,devo implementare il programma con due vincoli
    1)non devo modificare il file A
    2)deve essere OTTIMO come tempo di esecuzione il programma anche s un file di testo lungo

    vi dico la mia soluzione che pero non reputo ottima
    -uso una stringa di appoggio molto lunga che chiamo CNT
    -leggo una parola alla volta dal file(eliminando opportunatamente spazi e caratteri di punteggiatura)
    -la prima parola che leggo la scrivo dentro CNT con '*' prima e dopo--> *parola*
    -continuo a leggere le parole dal file A una dopo l altra e tramite strstr controllo se *parola* letta è contenuta in CNT se non è contenuta la concateno a CNT .(QUESTA FASE E' QUELLA CHE REPUTO LA PIU ONEROSA IN QUANTO STRSTR SCORRE TUTTA LA STRINGA CNT ,CHE E' MOLTO LUNGA IN QANTO CONTIENE LE PAROLE DEL FILE,E IN PIU L OPERAZIONE DI CONCATENAMENTO)
    -finito di leggere tutto il file A,CNT conterrà *parola1*parola2*...* cioè tutte le parole (NON DOPPIONI)separate da *. A questo punto stampo la stringa CNT sul file index.txt

    avete in mente una soluzione migliore??
    vi ringrazio gia in anticipo,spero di essere stato chiaro vi aggiungo uno pseudocodice della mia soluzione

    //leggo prima parola del file
    //sprintf su CNT di *parola*
    //WHILE(NON E' FINITO IL FILE)
    //LEGGO PAROLA
    // STRSTR(CNT,*PAROLA*
    //SE NON è CONTENUTA IN CNT CONCATENO *PAROLA* CON CNT USANDO L APPOSITA FUNZIONE DI STRING.H

    //ALLA FINE FPRINTF(INDEX.TXT,CNT);
    df

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Stai studiando a scuola? Quali argomenti hai affrontato?

    Array?
    Ordinamenti?
    Strutture?
    Allocazione dinamica?
    Alberi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    si sto studiando a scuola..
    diciamo s array ordinamenti
    strutture allocazione dinamica sono un po piu ferrato
    mentre su alberi e liste non l ho ancora studiate ma se è la soluzione piu ottimale sono disponibile anche a studiarle..te damme quelache dritte :-)
    df

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa un array inserendo le parole che leggi in modo ordinato nello stesso. Se mantieni l'array ordinato, puoi facilmente cercare la parola per vedere se esiste (ad esempio, con una ricerca binaria). Alla fine potrai scrivere l'array ordinato nel file di destinazione, sicuro che le parole saranno presenti una sola volta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    ma ogni volta che inserisco la parola,devo ordinare l array??
    quindi ricapitolo
    -prendo la parola da file
    -ricerca binaria(parola,array)
    -senon è presente la inserisco nel array
    -ordino l array

    itero queste operazioni,alla fine stampo il contenuto nell array
    df

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... l'array non deve essere ordinato. La ricerca binaria ti indica anche in quale posizione deve essere inserita la nuova parola. Dovrai quindi spostare tutti gli elementi in avanti di una posizione per fare posto al nuovo.

    Questo è ovviamente inefficiente. Se implementassi una "lista semplice" ordinata secondo la parola, potresti inserire il nuovo dato semplicemente lavorando con i puntatori agli elementi della stessa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    se tu mi dessi maggiori info sulla soluzione con una lista semplice te ne sarei grato, mi metterei subito alavoro :-)
    preferisco intraprendere la via delle liste se è piu efficente
    df

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se tu cercassi un po' su google in base a quello che ti si suggerisce ...

    Cerca

    Linked list
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    scusa mi sono sbagliato ,non voglio sapere come funzionano le linked list(quello lo so) volevo sapere la tattica che avevi in mente per risolvere il mio problema con l uso delle linked list
    df

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Piu' che una linked list, mi sembra necessario che tu utilizzi un albero binario.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.