Esercizio 3
Attenzione!!!
Non si possono usare le funzioni della libreria
strings.h e string.h. Le funzioni necessarie devono essere realizzate dallo
studente.
Scadenza: 21-06-2004
Word-count
Scrivere un programma che legga un file di testo specificato dall'utente,
e stampi su video il numero di righe, di parole e di lettere contenuti nel
file. Valgono le seguenti definizioni:
- sono considerati spazi gli spazi tipografici ' ', le tabulazioni
'\t', i ritorni a capo '\n' e qualunque altro carattere non stampabile;
si puo` usare la funzione
isspace(char c)
(definita
in ctype.h) per determinare se un carattere c e` uno spazio;
- una lettera e` qualunque carattere non considerato spazio;
- una parola e` una sequenza di caratteri non inframmezzati da spazi;
- una riga e` una sequenza non vuota di parole terminata da un carattere
'\n'.
isspace(c) ritorna vero (=nonzero) se c e` uno spazio.
Esempio
Se il file pippo.txt ha il contenuto seguente
\n
\n
Pippo pluto e\n
Paperino\n
\n
vanno a spasso 5\n
(gli \n sono ritorni a capo) il programma deve contare 32 lettere, 8 parole
e 3 righe.
Il nome del file viene introdotto da tastiera dall'utente.
Punto di partenza: readlines.c . Il programma
readlines.c fa uso della funzione fgets la cui desczione si trova
qua .
Word-replace
Scrivere un programma che legge un file di "comandi" ed un file di dati,
scrivendo poi un file di risultati secondo le indicazioni seguenti.
Il file di comandi contiene su ogni riga due parole (non ci sono spazi
all'interno di una parola, ed ogni cosa scritta sulla stessa riga dopo le
prime due parole viene ignorata come un commento). Ognuna di queste coppie
di parole A e B codifica una sostituzione da fare sul file di dati, nel
quale la parola A viene sostituita dalla parola B. Il file dati viene letto
ma non sovrascritto; viene invece generato un file di risultati nel quale
- le righe vuote del file di input non vengono riportate;
- ogni parola per la quale e` specificata una sostituzione nel file
di comandi viene sostituita; le parole sostitute vengono incluse tra asterischi
e scritte in maiuscolo;
- la sostituzione e` case-insensitive (se devo sostituire Pippo sostituisco
anche piPPp, PipPo, PIPPO, ecc.)
- tra due parole consecutive c'e` un solo spazio; la suddivisione in
righe rimane quella del file di dati (righe vuote escluse).
Se il file di dati e` come nell'esempio precedente ed il file di comandi
contiene
Pippo Mario -- e questo e` un commento che
verra` ignorato!
Pluto Sergio
spasso ivrea
Il file di risultati dovra` contenere
*MARIO* *SERGIO* e\n
Paperino\n
vanno a *IVREA*
I nomi dei tre file vengono introdotti da tastiera dall'utente.