Programma in C
#include <stdio.h>
int consonante(char c) /* facoltativa */
{
c = tolower(c); /* converte il carattere in minuscolo */
51
if ( (c > a) && (c <= z) && (c != e) &&
(c != i) && (c != o) && (c != u) )
return 1;
else return 0;
}
void correggi(char *file1, char *file2)
{
FILE *f1, *f2;
char a;
signed char b; /* serve per il confronto con EOF */
f1 = fopen(file1, "r");
f2 = fopen(file2, "w");
if ( (b = fgetc(f1)) != EOF ) /* legge primo carattere */
fputc(b, f2); /* se non EOF lo copia nel file2 */
while ( fscanf(f1, "%c", &a) != EOF ) /* a: ultimo carattere copiato */
{
fprintf(f2, "%c", a); /* b: penultimo caratt. copiato */
while ( a == b && consonante(a) ) /* due consonanti uguali copiate */
{
if ( fscanf(f1,"%c",&a) == EOF ) /* si legge senza copiare */
break;
if (a != b)
fprintf(f2, "%c", a);
}
b = a; /* si aggiorna b */
}
fclose(f1);
fclose(f2);
}
main () /* programma principale */
{
correggi("errato.txt", "ok.txt");
}
Correttore
Il programma è in grado di rimuovere gli errori di battitura che abbiano generato parole con tre o più consonanti uguali adiacenti, eliminando tutte le occorrenze della consonante tranne 2 (ad esempio, gatttto diventa gatto). Il programma lavora su due file, dove prende il primo file in cui deve correggere e lo salva nel secondo file nel modo corretto.