Muchas gracias por la respuesta, me ha servido mucho, pero tengo una última duda, tengo este código, y necesito que me cuente los espacios, ya que no me lo hace. El código que tú has puesto #3 me sirve, pero no genera números aleatorios por carácter en el string, simplemente suma 4 posiciones a cada carácter. Pongo código a ver si me podéis ayudar con ese problema de que no cuente los espacios. Gracias
Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define max_tam 1000
void codificacion();
int aleatorio();
char s_patron[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz0123456789?!*()$#.,";
char s_original[max_tam], s_codificado[max_tam], s_decodificado[max_tam];
int t_original, t_patron, t_codificado, t_codigo, t_decodificado, s_codigo[max_tam];
main()
{
int i;
srand(time((NULL)));
printf("Introduce un texto a codificar:\n");
scanf("%s", &s_original);
codificacion();
printf("La frase codificada es: %s\n", s_codificado);
for(i=0;i<t_codigo;i++)printf("%d", s_codigo[i]);
system("PAUSE");
}
void codificacion()
{
int i, j, n;
t_original=strlen(s_original);
for(i=0; i<t_original;i++)
{
t_patron=strlen(s_patron);
for(j=0; j<t_patron; j++)
{
if(s_original[i]==s_patron[j] || s_original[i] == ' ')
{
n=aleatorio();
s_codificado[i]=s_patron[j+n];
s_codigo[i]=n;
}
}
}
}
int aleatorio()
{
int aleatorio;
aleatorio = rand()%9+1;
return aleatorio;
}