Ciao!
Questa volta l'esercizio è:
Realizzare un programma C che legge il contenuto di un file carattere per carattere (inclusi gli spazi bianchi ed i caratteri di ritorno a capo) e lo memorizza in un array di lunghezza opportuna. quindi implementare la funzione:
- char* codifica(const char* s, int d) che, data una stringa s ed un intero d, restituisce una nuova stringa il cui codice ASCII del carattere i-esimo è ottenuto sottraendo d al codice dell'i-esimo carattere di s.
Verificare la funzione mediante un'opportuna funzione main di prova.
Dunque, ecco il
main:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "codifica.h"
int main()
{
FILE *f = fopen("/home/davide/Scrivania/Esercitazione 3/testo.txt", "r");
char flag, *s;
int i = 0, d;
if(f == NULL) printf("Errore nell'apertura del file.\n");
else
{
//Ciclo per contare quanti caratteri
//ci sono all'interno del file, in modo tale
//da definire la lunghezza dell'array
//da allocare dinamicamente
while(!feof(f))
{
flag = getc(f);
i++;
}
i--;
printf("%d", i);
//Allocazione dinamica della stringa
s = (char *) malloc (i * sizeof(char));
//Inserimento dei dati all'interno della stringa
i = 0;
while(!feof(f))
{
fscanf(f, "%c", &s[i]);
i++;
}
for( i = 0; i < 5; i++)
printf("s[%d] = %c\n", i, s[i]);
//Inserimento di d
//printf("d: ");
//scanf("%d", &d);
//Invocazione della funzione codifica
codifica(s, d);
fclose(f);
}
return 0;
}
1 - All'interno del ciclo:
while(!feof(f))
{
flag = getc(f);
i++;
}
Ci ho dovuto mettere, per forza, la prima istruzione che vedete, perché altrimenti i non mi acquisisce niente. Perché?
2 - All'interno di:
for( i = 0; i < 5; i++)
printf("s[%d] = %c\n", i, s[i]);
Mi stampa un array vuoto (ho messo 5 perché ho "a b c" all'interno del file), perché?
---
Una volta sistemati questi due punti:
3 - Perché l'array, nella definizione della funzione codifica, l'esercizio me lo dichiara di tipo const? Qual è la necessità?
4 - Una volta passato l'array, devo chiaramente scandirlo elemento per elemento per poterlo codificare, ma come faccio a farlo se nella funzione non passo la dimensione dell'array?
5 - Per la codifica avevo pensato ad una cosa del genere:
codifica.c
#include <stdio.h>
#include <string.h>
#include "codifica.h"
char* codifica(const char* s, int d)
{
int j; //Indice di scorrimento per la stringa passata alla funzione
char temp;
for(j = 0; j < (?)dimensione(?); j++)
{
temp = s[j];
(int) temp;
temp -= d;
(char) temp;
s[j] = temp;
}
}
Potrebbe funzionare?
Vi ringrazio.