Solución a la Tarea 7: Palabras similares

Había varias formas de resolver la tarea. Una de ellas consistía de lo siguiente: Primero revisamos las longitudes de las dos palabras. Si las longitudes son iguales, la única forma de que sean similares es que las dos palabras difieran en sólo una letra. La función letra que muestro abajo primero encuentra el número de letras distintas y regresa 1 sólamente si hay exactamente una letra distinta. Si las longitudes difieren por uno, la única forma de que sean similares es que a la palabra más corta se le haya insertado una letra para obtener la palabra más larga. La función borra que muestro abajo verifica que éste sea el caso. Observen que los casos 2 y 3 sólamente difieren en cual es la palabra más larga. Finalmente, si las longitudes difieren en al menos dos, entonces las palabras no pueden ser similares.

#include <stdio.h>
#include <string.h>
 
int letra(char s[], char t[])
{
  int i, k;
 
  for (i = k = 0; (k < 2) && s[i]; i++)
    if (s[i] != t[i])
      k++;
  return (k == 1);
}
 
int borra(char s[], char t[])
{
  int i, j;
 
  for (i = j = 0; (i <= j+1) && s[i]; i++)
    if (s[i] == t[j])
      j++;
  return (i <= j+1);
}
 
int main(void)
{
  int i, ls, lt, tipo = 0;
  char s[101], t[101];
 
  gets(s);
  gets(t);
  ls = strlen(s);
  lt = strlen(t);
  if (ls == lt)
    tipo = letra(s, t);
  else if (ls + 1 == lt)
    tipo = 2*borra(t, s);
  else if (ls == lt + 1)
    tipo = 3*borra(s, t);
  printf("%d\n", tipo);
  return 0;
}

Los valores de entrada y salida empleados para la evaluación fueron los siguientes:

Entrada                                      Salida


Para probar su tarea en UNIX, escriban la instrucción gcc procirNN.c -o procir para compilar su programa, y la instrucción ./procir para correrlo. Algunos errores comúnes fueron: (a) Aunque no es necesariamente un error, lo mejor era usar funciones. (b) Al calcular el valor máximo, varios supusieron que lo menos que podría ser era cero, pero a veces puede ser negativo.