nikpez
Ominide
2 min. di lettura
Vota 3 / 5

Concetti Chiave

  • Il programma in C legge due file: uno contenente testo con sequenze speciali e l'altro una tabella di corrispondenza tra lettere e numeri.
  • Le sequenze speciali nel testo sono lettere maiuscole racchiuse tra parentesi quadre, che devono essere sostituite con numeri interi.
  • La funzione leggiTabella legge il file di corrispondenza e memorizza i valori numerici in un array.
  • Il programma sostituisce ogni sequenza speciale nel testo con il numero corrispondente, stampando il risultato finale sullo standard output.
  • Gestisce errori di apertura file con messaggi di errore e termina il programma se i file non possono essere aperti.

Indice

  1. Esercizio C - File di Testo
  2. Esempio

Esercizio C - File di Testo

Un file contiene un testo in cui possono apparire delle sequenze speciali composte da una lettera maiuscola racchiusa tra parentesi quadre (v. il file testo.txt come esempio). Un secondo file (può essere utile trasferirlo in memoria centrale, v. esempio tabella.txt) contiene la corrispondenza tra lettere maiuscole e numeri interi. Scrivere un programma C che produca sul file standard di output il testo del primo file sostituendo a ciascuna sequenza speciale il corrispondente valore numerico.
Si supponga che non ci siano caratteri di una sequenza speciale non presenti nel file delle corrispondenze e che il testo non contenga i caratteri [‘ e ‘] se non nelle sequenze speciali suddette.

Esempio

File testo.txt
Il treno delle [H] e [M] porta un ritardo di [R] minuti. Chissà se mi
rimborseranno i [E],[C] euro del biglietto? Il giorno [G]/[M]/2007 ci
sarà un’altra riunione alle [A].
File tabella.txt
A 11
G 23
E 14
M 12
C 50
H 17
R 35
Output
Il treno delle 17 e 12 porta un ritardo di 35 minuti. Chissà se mi
rimborseranno i 14,50 euro del biglietto? Il giorno 22/12/2007 ci
sarà un’altra riunione alle 11.
int main()
{
int tabella[26];
FILE *fpTesto;
FILE *fpTabella;
char car;
leggiTabella(tabella);
fpTesto=fopen("testo.txt","rt");
if (!fpTesto)
{
printf("Errore: il file contenente il testo da sostituire non
può venire aperto.\n");
exit(1);
}
while ((car=fgetc(fpTesto))!=EOF)
{
if (car == '[')
{
car=fgetc(fpTesto);
printf("%d",tabella[car-'A']);
car=fgetc(fpTesto); // leggo e ignoro la parentesi
//quadra chiusa
}
else printf("%c",car);
}
fclose(fpTesto);
getchar();
}
void leggiTabella (int tabella [])
{
FILE *fpTabella;
char lettera[2];
int num;
fpTabella=fopen("tabella.txt","rt");
if (!fpTabella)
{
printf("Errore: il file tabella non puo' venire aperto.\n");
exit(1);
}
while (fscanf(fpTabella,"%s%d",lettera,&num)!=EOF)
{
tabella[lettera[0]-'A'] = num;
}
fclose(fpTabella);
}

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community