Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100

    [c]leggere Parola X Parola File

    ciao ero interessato al codice c di un ciclo che a ogni iterazione nella variabile
    char *parola ci vada a finire il contenuto di una parola del file(poi utilizzerò il ciclo per altre operazione".
    il file è cosi strutturato
    esempio:
    ciao sono dario, come stai ?
    io sto bene, grazie.

    a ogni iterazione in parola voglio il contenuto della iesima parola

    NB:le parole sono separate da spazi, ma non mi interessa salvare in parola eventuali caratteri di punteggiatura esempio
    alla 3 iterazione parola voglio che contenga "dario" e non "dario,"
    vi sarei grato di postarmi proprio il codice del tipo
    while(ris!=EOF){
    ...
    ...
    ...
    parola=.....


    }



    ps:
    i caratteri di punteggiatora che voglio escludere sono quelli della lingua italiana
    :,!?.;
    il file rispetta la regola dell italiano che dopo carattere di punteggiatura la parola è separata da uno spazio

    grazie
    df

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [c]leggere Parola X Parola File

    Originariamente inviato da esoni
    vi sarei grato di postarmi proprio il codice del tipo
    Guarda che qui non si "posta il codice" a richiesta.

    Si discute del problema ... ad esempio, tu come faresti, quale difficoltà trovi, quale codice hai provato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    la mia difficoltà è che devo filtrare i caratteri di punteggiatura..
    farei con fscanf ma purtroppo nn mi torna..
    è una singola istruzione cmq non è che ho chiesto un progetto
    df

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da esoni
    la mia difficoltà è che devo filtrare i caratteri di punteggiatura..
    farei con fscanf ma purtroppo nn mi torna..
    è una singola istruzione cmq non è che ho chiesto un progetto
    Non è questione di un progetto o una istruzione ... è l'approccio sbagliato.

    In ogni caso, parola è solo un puntatore mentre ti serve un array di char (o devi comunque allocare la memoria per la stringa). Poi devi usare la fscanf e ottenuto il dato dal file devi controllare con una if l'ultimo carattere della stringa letta, confrontandolo con ogni carattere di punteggiatura da escludere. Se ne trovi, sposti il terminatore della stringa (NUL) in quella posizione in modo da eliminare il carattere.

    Come vedi, non hai richiesto una singola istruzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    100
    come mi hai suggerito te so farlo vedi codice:

    #include <stdio.h>
    #include <string.h>
    void removep(char s[]){
    if((s[strlen(s)-1]=='!')||(s[strlen(s)-1]=='?')||(s[strlen(s)-1]=='.')||(s[strlen(s)-1]==':')||(s[strlen(s)-1]==','))
    s[strlen(s)-1]='\0';

    }
    main(){
    char parola[20];
    FILE *f1;
    f1=fopen("testo","r");
    if(f1==NULL)
    {
    printf("errore apertura file");



    }
    int ris,i=0;
    ris=fscanf(f1,"%s",parola);
    while(ris!=EOF){
    removep(parola);
    printf("\n parola %d è %s",i,parola);
    ris=fscanf(f1,"%s",parola);
    i++;

    }


    }
    --------------------------------------------------------------------------------------------
    solo che so che si puo fare con le specifiche di formato di fscanf %[] solo che ho provato ma non mi riesce
    qualcuno sa come usare fscanf in modo che legga una parola non leggendo eventuali punteggiature?
    df

  6. #6
    Un consiglio:
    codice:
    #include <ctype.h>
    
    void removep(char s[]){
        char * last=s+strlen(s)-1;
        if(ispunct(*last))
            *last=0;
    }
    così eviti di richiamare tante volte per niente strlen (che ogni volta scorre la stringa fino alla fine), e usi la funzione apposita per vedere se un carattere è di punteggiatura.
    Se invece ti interessano solo quei particolari caratteri di punteggiatura:
    codice:
    void removep(char s[]){
        char * last=s+strlen(s)-1;
        switch(*last)
        {
            case '?':
            case '.':
            case ':':
            case ',':
            case '!':
            case ';':
                *last=0;
        }
    }
    o, in alternativa degli if, ma il punto fondamentale è non richiamare cento volte strlen.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.