Untitled

 avatar
unknown
c_cpp
2 months ago
2.5 kB
4
Indexable
/*
Scrivere un programma che riceve come argomento da riga di comando il nome di un file di testo. Il file contiene una
sequenza di parole inglesi, ciascuna di lunghezza indefinita; le parole sono organizzate in varie righe e nella stessa
riga sono separate da un singolo spazio. Il programma legge il contenuto del file e visualizza per ciascuna riga letta il
numero di caratteri diversi dai separatori (spazio e a-capo) ed il numero di parole. Gestire opportunamente gli
eventuali casi di errore mediante la visualizzazione di messaggi a video.
Esempio
Se il file contiene il seguente testo:
In questa riga ci sono 7 parole
Mentre qui 3
Ora 2
Ancora due
Il programma stamperà a video:
Riga 1: 25 caratteri, 7 parole
Riga 2: 10 caratteri, 3 parole
Riga 3: 4 caratteri, 2 parole
Riga 4: 0 caratteri, 0 parole
Riga 5: 9 caratteri, 2 parole

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LINE_LENGTH 1024

int main(int argc, char *argv[])
{

    if(argc == 2)
    {
        FILE *file = fopen(argv[1], "r");
        if(file != NULL)
        {
            char linea[MAX_LINE_LENGTH];
            int numriga = 0;

            while(fgets(linea, MAX_LINE_LENGTH, file) != NULL)
            {
                int numchar=0;
                int numparole=0;
                int inParola=0;

                numriga++;
                //The quick brown fox jumps over the lazy dog
                // linea = [T] [h] [e] [ ] [q] [u] [i] [c] [k] [ ] [b]...
                for(int i=0; linea[i] != '\0' && linea[i] != '\n'; i++)
                {
                    if(linea[i] != ' ') // Se troviamo un carattere diverso dallo spazio
                    {
                        numchar++; //Incremento il contatore dei caratteri

                        if(!inParola) // Se non eravamo in una parola
                        {
                            numparole++; //Abbiamo trovato una nuova parola
                            inParola = 1; // Settiamo il flag
                        }


                    }else{
                        inParola=0; //Se troviamo uno spazio, non siamo più in una parola
                    }
                }

                 printf("Riga %d: %d caratteri, %d parole\n", numriga, numchar, numparole);

            }

            fclose(file);

        }else{
            printf("Errore apertura file\n");
        }

    }else{
        printf("Numero argomenti sbagliato\n");
    }
  

    return 0;

}
Leave a Comment