Esercizio stringa

di il
2 risposte

Esercizio stringa

Salve ragazzi. ho questo esercizio...data una stringa, dopo aver contato il numero di comparse che c'è per ogni vocale, (ovvero la 'a' c'è 3 volte, la 'e' c'è 5 volte ecc...), contare le parole in cui è presente ogni vocale (es. la lettera a è presente in 4 parole, la e in 5 parole ecc...).
io sono arrivato a conteggiare le vocali e fin qui tutto ben , ma non so proprio come impostare l'ultima parte relativa alle parole. grazie per l'aiuto.
di seguito vi posto il codice fino ad ora.
il mio file di lettura contiene: camera riscossa percuoti branzino

#include <stdio.h>
#include <stdlib.h>
#define DIM 200

FILE* aprifile(char[]);
void leggivocali(FILE*,FILE*,char[],char[]);


int main(int argc, char** argv) {
    FILE *fp,*ff;
    int k=0;
    char vocali[]={'a','e','i','o','u'};
    char str[DIM];
    printf("Inserire nome file da aprire: ");
    fp=aprifile("r");
    printf("Inserisci il nome del file su cui scrivere: ");
    ff=aprifile("w");
    while(!feof(fp)){
        fgets(str,DIM,fp);
        k++;
    }   
    leggivocali(fp,ff,str,vocali);
    
    fclose(fp);
    fclose(ff);
    return (EXIT_SUCCESS);
}

FILE *aprifile(char mode[]) {
    FILE *p;
    char nomefile[DIM+1];
    scanf("%s", nomefile);
    p=fopen(nomefile,mode);
    if (p==NULL) {
        printf("ERRORE nell'apertura del file, riprovare!\n");
        return (NULL); 
    }else
        return p; 
}

void leggivocali(FILE* p,FILE* pp,char s[],char v[]){
    int k=0;
    int a,e,i,o,u;
    int ca,ce,ci,co,cu;
    char ch;
    for(k=0;k<DIM;k++){
        if(s[k]==v[0]){
            a++;
        }else if(s[k]==v[1]){
            e++;
        }else if(s[k]==v[2]){
            i++;
        }else if(s[k]==v[3]){
            o++;
        }else if(s[k]==v[4]){
            u++;
        }
    }
    fprintf(pp,"Vocali    Numero vocali   Numero parole");
    fprintf(pp,"\n");
    fprintf(pp,"  a%14d",a);
    fprintf(pp,"\n");
    fprintf(pp,"  e%14d",e);
    fprintf(pp,"\n");
    fprintf(pp,"  i%14d",i);
    fprintf(pp,"\n");
    fprintf(pp,"  o%14d",o);
    fprintf(pp,"\n");
    fprintf(pp,"  u%14d",u);
}

2 Risposte

  • Re: Esercizio stringa

    Come per gli altri esercizi che stai facendo, devi individuare inizio e fine parola, ovvero separare le varie parole prima di contare le vocali.

    Non sai usare la strtok, ma puoi scrivere del codice che individui inizio e fine di una parola. La fine è individuata dallo spazio oppure dal NULL di fine stringa.
  • Re: Esercizio stringa

    Si ho contato anche le parole ora... ma comunque non so come continuare. la mia intenzione era quella di leggere lettera per lettera, nel momento in cui incontrava la 'a' (per esempio),incrementavo la variabile che conta le parole di 1,si fermava per poi ricominciare dal primo spazio che trovava fin quando non avevo di nuovo una 'a', e così via fino alla fine della stringa... non so quanto possa essere un'idea giusta però
Devi accedere o registrarti per scrivere nel forum
2 risposte