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.