Untitled
unknown
c_cpp
10 months ago
2.5 kB
6
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;
}Editor is loading...
Leave a Comment