Untitled
/* 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