Cifrador de líneas de texto

 

El código lee un valor numérico entero n, comprendido entre 1 y 9, para cifrar una línea de texto que acaba con un punto. Si un carácter es una letra o un dígito, se reemplaza por el carácter que se encuentra n posiciones más adelante dentro del conjunto de caracteres (mayúsculas, minúsculas, dígitos), suponemos que detrás de la Z está la A, de la z la a y del 9 el 0. Cualquier carácter que no sea letra o dígito se reemplazará por un guion ‘-’

Además el programa eliminará todas las repeticiones consecutivas de un mismo carácter. El programa también comprueba que el valor introducido para n está dentro del intervalo pedido, de no ser así solicitará otro número hasta que el valor introducido sea correcto.

Ejemplo:
Si el texto que se introduce es: El robot R2D2 es el mas chuuuuloooo de la pelicula.
Y n=1
Se imprimirá: Fm-spcpu-S3E3-ft-fm-nbt-divmp-ef-mb-qfmjdvmb


#include <stdio.h>

void main (){

    char car, ant;
int num, i;

    printf(“Introduce un numero entre 1 y 9: “);
scanf(“%d”, &num);

    while (num > 9 || num < 1)//Se controla que la entrada de datos es correcta
{
printf(“Valor incorrecto.\n”);
printf(“\nIntroduce un numero entre 1 y 9: “);
scanf(“%d”, &num);
}

    fflush(stdin);   //vacia el buffer, necesario puesto que despues se lee un caracter
printf (“\nEscribe un texto que acabe con punto: “);
scanf (“%c”, &car);
ant = car+1;

    while (car != ‘.’)//Si hay un punto, se detiene
{
if (car != ant)
{
if (car>=’a’&& car<=’z’)
{
if((car+num)>’z’)
printf(“%c”, car+num +’a’-‘z’-1);//Cuando la suma salga de ‘z’ se le resta para “dar la vuelta”
else printf(“%c”,car+num);
}
else if (car>=’A’&&car<=’Z’)
{
if((car+num)>’Z’)
printf(“%c”, car+num +’A’-‘Z’-1);
else printf(“%c”,car+num);
}
else if (car>=’0’&& car<=’9′)
{
if((car+num)>’9′)
printf(“%c”, car+num +’0′-‘9’-1);
else printf(“%c”,car+num);
}
else printf(“-“);
}
ant = car;
scanf(“%c”, &car);
}
}