Ciao ragazzi!
Il seguente codice, data una stringa e una chiave (molto rudimentale) in input, consente di effetturare una banalissima "crittografia" se così la si può chiamare.
Ad esempio: se inserisco "ciao" e la chiave è 1, allora l'output sarà "djbp".
Il codice funziona, anche se mi da alcuni warning. Ringrazio, tuttavia, alcuni utenti che mi hanno dato in precedenza delle spiegazioni riguardo il getchar()!
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10000
char *cifra(char Frase[], int nA, int chiave);
int main()
{
char stringa[MAX_SIZE], new_array;
int i, j; //Indice di scorrimento
int key;
printf("Inserire una stringa: ");
gets(stringa);
printf("Chiave di cifratura: ");
scanf("%d", &key);
while(stringa[i] != '\0')
i++;
cifra(stringa, i, key);
printf("\nArray crittografato: \n");
j = 0;
while(stringa[j] != '\0')
{
printf("%c", stringa[j++]);
}
printf("\n");
return 0;
}
char *cifra(char Frase[], int nA, int chiave)
{
for(j = 0; j < nA; j++)
{
if(Frase[j] != 'z')
Frase[j] = Frase[j] + chiave;
else if(Frase[j] == 'z')
{
Frase[j] = 'a';
chiave-=1;
Frase[j] = Frase[j] + chiave;
}
}
return Frase;
}
Come potete vedere il prototipo della funzione è il seguente:
char *cifra(char Frase[], int nA, int chiave);
In realtà, però, l'esercizio mi dava come suggerimento il seguente prototipo:
char* cifraFrase(char Frase[], int nA, char (*f)(char c, int s))
L'ho modificato perché non so bene come utilizzare
char (*f)(char c, int s). So che si tratta di un puntatore ad una funzione ma non ho ben chiaro a che cosa possa servire.
Il testo dell'esercizio è questo:
Scrivere un programma in linguaggio C che realizzi la seguente funzione: char* cifraFrase(char Frase[], int nA, char (*f)(char c, int s)) che prende in ingresso un array contenente i caratteri che formano una parola o frase (una stringa), alloca dinamicamente un nuovo array di caratteri ed assegna ad ogni posizione il risultato della funzione crittaCarattere al rispettivo carattere nell'array originario. Infine restituisce il nuovo array. Scrivere diverse funzioni di crittografia (esempi: 1. semplice shift del codice del carattere di s posizioni, 2. calcolo dei divisori di s e shift alternato destra sinistra dei divisori, etc...) da passare al puntatore a funzione f. Verificare la funzione mediante un'opportuna funzione main di prova.
Non mi interessa molto la parte della crittografia di per se, come codice fa piuttosto pena dal punto di vista dell'utilizzo. Quello che a me serve è imparare per bene l'utilizzo dei puntatori e delle funzioni.
Piccola curiosità:
"Verificare la funzione mediante un'opportuna funzione main di prova." che significa?
Grazie!!