Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    2

    [C] Aggiunta di parole a una stringa

    Ciao a tutti, ho un problema con un programma in C.
    Dovrebbe leggere un file di testo e contare quante volte la stessa sequenza di parole viene ripetuta al suo interno.
    Avevo pensato di iniziare copiando il testo in una stringa a parte in modo da eliminare tutti i caratteri per cui isalpha restituisce 0, così da avere solo le parole intervallate da uno spazio (con un'apposita condizione).
    Tuttavia non riesco ad aggiungere parole all'array, probabilmente faccio confusione con i puntatori (non c'è un limite al numero di parole, quindi la memoria dev'essere allocata dinamicamente).
    Compilando il programma mi dà dei warning su strcat e eseguendolo va in crash.
    Vorrei chiedere qual è l'errore e, se possibile, qualche indizio su come procedere per il resto del programma (o eventualmente se c'è un metodo migliore per analizzare il testo senza contare i caratteri diversi dalle lettere).
    Di seguito posto la parte di codice finora realizzata.
    Grazie a tutti dell'aiuto!

    codice:
    #include<stdio.h>
    #include<ctype.h>
    #include<string.h>
    int main(){
        char s, word[100], *a1=malloc(sizeof(char)), *a2=malloc(sizeof(char));
        int i=0;
        FILE *fp;
        if((fp=fopen("file.txt", "r"))==NULL){
            printf("Il file non risulta accessibile");
            return 0;
        }
        else{
            s=fgetc(fp);
            while(!feof(fp)){
                i++;
                if(isalpha(s) || s==' '){
                    a2=a1;
                    a2=realloc(a1, sizeof(char)*(i+1));
                    strcat(a2, s);
                }
                s=fgetc(fp);
            }
            printf("%s", a2);
            fclose(fp);
            getch();
        }
    }

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Utilizzi male la strcat, s è un carattere, non una stringa.Ecco il motivo del warning, la strcat accetta come parametri due stringhe cioè due puntatori a char (ma non risolvi la questione passando &s come parametro, perché una stringa deve contenere anche il terminatore).
    Altro problema: tu hai allocato dinamicamente la memoria puntata da a1 e a2, ma poi ha dichiarato:

    codice:
    a2=a1;
    Questo significa che l' area di memoria puntata da a2 rimane allocata eppure non la utilizzi, c'è uno spreco di memoria.

    Per quanto riguarda il metodo, quello che ti consiglio è di leggere il file riga per riga e di allocare prima un grande array che contiene tutte le stringhe.
    Dopodichè procedi col contare le sequenze di parole.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    2
    Grazie per la pronta risposta!
    Sono riuscito a memorizzare le righe del file in un array di stringhe allocato dinamicamente.
    La mia intenzione ora è di scansionare tutti i caratteri di ogni riga ed eliminare dall'array-stringa gli elementi non alfabetici e successivamente memorizzare ogni sequenza intervallata da spazi in un nuovo array di stringhe più corte (ovvero le singole parole).
    Credi possa funzionare o c'è un metodo migliore che non implica la creazione di nuovi array?
    Grazie ancora!

  4. #4
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Puoi farlo direttamente mentre leggi da file: tieni traccia di ogni stringa che hai letto fino a quando non hai trovato uno spazio o un carattere non alfabetico.Poi la allochi dinamicamente e la aggiungi all' array.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.