Advertisement
charles0145

GUIA 3 - MODULO 3 - Funciones y Cadenas

Sep 24th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.48 KB | None | 0 0
  1. Ejercicio 1 - Función STRREV
  2. La función strrev en C permite invertir una cadena, pero lamentablemente no es una función portable. Implemente la función strrev que tiene el siguiente prototipo:
  3. char *strrev (char *cadena);
  4. La función recibe una cadena la invierte y retorna la misma cadena modificada.
  5.  
  6. OBSERVACIÓN :  NO PUEDE USAR NINGUNA FUNCIÓN DE LA BIBLIOTECA STRING.H, ya que no fue incluida en el programa que probará la efectividad de su función strrev.
  7. ==============================================================================
  8. char *strrev (char *cadena){
  9.    
  10.     int aux = 0;
  11.     int largo;
  12.     int i, j;
  13.     char swap;
  14.    
  15.     while(cadena[aux] != '\0'){     //Calcula el largo de la cadena
  16.         aux++;
  17.     }
  18.    
  19.     largo = aux - 1;
  20.     j = largo;
  21.    
  22.     for(i = 0; i < j; i++){         //Ciclo que va volteando la cadena
  23.         swap = cadena[i];
  24.         cadena[i] = cadena[j];
  25.         cadena[j] = swap;
  26.         j--;
  27.     }
  28.     return cadena;
  29. }
  30. ==========================================================================
  31. EJERCICIO 2 - Función STRCMP
  32. Escriba su propia función para comparar cadenas !. El protipo de esta función debe ser :
  33. int mi_strcmp ( const char * cadena1, const char * cadena2 );
  34. Esta función recibe 2 cadenas : cadena1 y cadena2, y las compara carácter a carácter, retornando un valor igual a 0 si cadena 1 y cadena2 son iguales, un valor menor a 0 si cadena1 es menor que cadena2, y un valor mayor a cero si cadena1 es mayor que cadena2.
  35.  
  36. OBSERVACIÓN :  NO PUEDE USAR NINGUNA FUNCIÓN DE LA BIBLIOTECA STRING.H, ya que no fue incluida en el programa que probará la efectividad de su función mi_strcmp .
  37. ========================================================================
  38. int mi_strcmp (const char * cadena1, const char * cadena2 ){
  39.    
  40.     int resto = 0;
  41.     int i = 0;
  42.     int aux1, aux2;
  43.    
  44.     while((cadena1[i] != '\0') || (cadena2[i] != '\0')){
  45.         if(cadena1[i] != cadena2[i]){
  46.             aux1 = cadena1[i];
  47.             aux2 = cadena2[i];
  48.             resto = aux1 - aux2;
  49.             break;
  50.         }
  51.         i++;
  52.     }
  53.     return resto;
  54. }
  55. ===========================================================================
  56. EJERCICIO 3 - Criptografía Básica
  57. Un cifrado es un medio para ocultar un mensaje. Una de las técnicas más básicas de cifrado consiste en utilizar un abecedario alterado y sustituir las letras del mensaje a encriptar por las letras que ocupan la misma posición en el abecedario alterado. Implemente la siguiente función en C :
  58. void descifrar(char *cadenaCifrada, char *abcedarioAlterado);
  59. La función recibe una cadena que contiene un mensaje cifrado y el abecedario alterado. La función debe descifrar el mensaje e imprimir su contenido. Considere que la cadena tiene como máximo 1000 caracteres (sin considerar el carácter NULO).
  60.  
  61. Ejemplo :
  62.  
  63. char abcedarioNormal[27]   = "abcdefghijklmnopqrstuvwxyz";
  64. char abcedarioAlterado[27] = "qwertyuiopasdfghjklzxcvbnm";
  65. char cadena[] = "lt rtleoykqk";
  66. La impresión será : "se descifrar"
  67. ==============================================================================
  68. void descifrar(char *cadenaCifrada, char *abcedarioAlterado){
  69.     int i, n, c;
  70.     char copia;
  71.     char abcedarioNormal[27]   = "abcdefghijklmnopqrstuvwxyz";
  72.    
  73.     n = strlen(cadenaCifrada);                      //Mide el largo del texto
  74.     char traduccion[n];
  75.    
  76.     for(i = 0; i < n; i++){
  77.         if(isalpha(cadenaCifrada[i])){
  78.             copia = cadenaCifrada[i];
  79.             if(isupper(copia)){                     //Si es el caracter es mayuscula, convierte una copia en minuscula para poder trabajar con el
  80.                 copia = tolower(copia);
  81.             }
  82.             c = strchr(abcedarioAlterado, copia) - abcedarioAlterado; //Busca el caracter en el tecladoA y da su posicion de memoria, luego lo resta con el largo de la cadena para poder traducirlo
  83.             traduccion[i] = abcedarioNormal[c];
  84.             if(isupper(cadenaCifrada[i])){                  //Si el caracter era mayuscula inicialmente, lo vuelve a convertir
  85.                 traduccion[i] = toupper(traduccion[i]);
  86.             }
  87.         }
  88.         else{
  89.             traduccion[i] = cadenaCifrada[i];           //Si es un caracter no alfabetico de queda igual
  90.         }
  91.     }
  92.     for(i = 0; i < n; i++){
  93.         printf("%c",traduccion[i]); //Imprime la traduccion
  94.     }
  95. }
  96.  
  97. //FUN FACT EL CÓDIGO ES EXACTAMENTE EL MISMO QUE MI OTRO PASTE, EL EJ 1 DE CADENAS
  98. ==============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement