Calcolare media lunghezza parole in stringa

di il
2 risposte

Calcolare media lunghezza parole in stringa

Ragazzi, mi sto impappinando. Non riesco a fare un esercizio.
Il programma deve acquisire una stringa con massimo 60 caratteri e:
a. Stabilire quante sono le parole contenute effettivamente nella stringa
b. Calcolare la media della lunghezza delle parole

Non riesco proprio ad andare avanti con il secondo punto. La variabile cont è un contatore che conta i caratteri della stringa, ma non so dove metterla e come fare la media in seguito.
Ho inizializzato anche somma ma non usata. Provato in molti modi
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define N 61

int main()
{
    char str[N];
    char tmp[N];
    int i, l, j, lung, cont, somma, totale, pos;
    float media;

    printf("Inserire stringa: ");
    gets(str);

    if(strlen(str)>60) // controllo la lunghezza
    {
        printf("Errore, il numero di caratteri inserito e' troppo grande.");
        return -1;
    }
    if(str[0]=='\0') // controllo che ci sia almeno una parola
    {
        printf("Nessuna parola inserita.");
        return -2;
    }

    l=0;
    lung=strlen(str);
    for(i=0; i<=lung; i++) // <= perchè conteggio anche l'ultima posizione, cioè "\0"
    {
        if(isspace(str[i])!=0)
        {
            l++;
        }
        if(str[i]=='\0')
        {
            l++;
        }
    }
    printf("Parole %d\n", l);

    cont=0;
    somma=0;
    pos=0;
    for(i=0; i<lung ; i++)
    {
        if(isspace(str[i])==0)
        {
            tmp[i]=str[i];
            cont++;
            pos++;
        }
        else
        {
            pos++;
            i=pos; // Faccio saltare ad i la posizione dello spazio.
        }
    }

    media=(float)(somma/l);
    printf("Media= %f", media);



    return 0;
}

2 Risposte

  • Re: Calcolare media lunghezza parole in stringa

    Ancora non ci riesco. Up!
  • Re: Calcolare media lunghezza parole in stringa

    Premetto che è una abbozzata...ci sarebbero altre condizioni da soddisfare (ad esempio se metti due spazi uno di seguito all'altro il programma non funziona).
    Comunque ecco il codice:
    
    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    
    
    int main()
    {
        int i,n_parole=0,n_lettere=0,conteggio[30],k,somma,media;
    
        char frase[60];
    
        for (i=0;i<=30;i++)
            conteggio[i]=0;
        do {
        cout<<"Inserisci la frase ";
        gets(frase);
    
        if (strlen(frase)>60)
           cout<<"Stringa troppo lunga ";
        }
        while (strlen(frase)>60);
    
        for (i=0;i<=strlen(frase);i++)
          if (frase[i]==32)
             n_parole++;
        k=0;
        for (i=0;i<=strlen(frase);i++)
          if ((frase[i]!=32) && (frase[i]!='\0'))
              n_lettere++;
            else if ((frase[i]==32) || (frase[i]=='\0'))
            {
                   conteggio[k]=n_lettere;
                   n_lettere=0;
                   k++;
            }
         somma=0;
         for (i=0;i<=k;i++)
             somma=somma+conteggio[i];
    
    
    
         media=0;
         media=somma/(n_parole+1);
    
         cout<<"La media della lunghezza delle paole e' "<<media<<endl;
         cout<<"La frase contiene "<<n_parole+1<<" parole";
             getch();
    
    }
    
    
    Se ti servoo spiegazioni non esitare a chiedere
Devi accedere o registrarti per scrivere nel forum
2 risposte