Untitled
unknown
c_cpp
a year ago
2.5 kB
8
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