Mayor coincidencia entre dos cadenas

Una función en C que toma como parámetro dos punteros apuntando a dos cadenas distintas:

char* maxima_coincidencia ( char *c1, char *c2 )
{
	char *max_c, *c_menor, *c_mayor, *p_me, *p_ma;

	int z, x, y;
	int sw = 1, c_superior = 0, c_inferior;

	int l1, l2, lmax, lmen; //l1: longitud de c1, l2: longitud de c2, lmax: menor longitud entre ambas
	l1 = strlen ( c1 ); l2 = strlen ( c2 );

	lmen = l1 <= l2 ? l1: l2; lmax = l1 >= l2 ? l1 : l2; //poniendo longitudes de cadena menor y mayor respectivamente

	p_me = c_menor = l1 < l2 ? c1 : c2;
        p_ma = c_mayor = l2 > l1 ? c2 : c1;

	for ( z = 0; z < lmen && sw; z++ )
	{
		for ( x = 0; x < lmax && sw; x++ )
		{
			if ( p_ma[x] == *p_me )
			{
				for ( y = x; y < lmax && p_ma[y] == *p_me && *p_me != 0; y++ )
				{
					p_me++;
					z++;
				}
				if ( y-x > c_superior )
				{
					c_inferior = x;
					c_superior = y-x;
				}
			}
			if ( c_superior + x > lmax )
				sw = 0;
		}
		if ( * ( ++p_me ) ==0 )
			sw = 0;
	}
	
	max_c = copiar_desde_hasta ( c_mayor+x, y-x );

	return max_c;
}

Se apoya en la función

 char* copiar_desde_hasta(char *cadena, int desplazamiento); 

 

Comentarios: