/*Este codigo se cede al dominio publico*/
/**
@fn string_compare()
@brief Compara dos cadenas lexicograficamente
@param `first' es la primera cadena
@param `second' es la segunda cadena
@warning Las cadenas no pueden ser NULL
@return Un numero negativo si la primera cadena es menor que la segunda, cero si son iguales y un numero positivo si la primera es mayor que la segunda
**/
int string_compare(const char* first, const char* second)
{
int difference;
unsigned int index = 0U;
/*
hacemos la verificacion del bucle al final...
para que en caso de que las cadenas...
tengan diferentes longitudes, la diferencia...
no sea opacada en la ultima iteracion...
de manera que parezca que son iguales...
cuando en realidad no lo son
*/
do
{
difference = static_cast<int>
(first[index] - second[index]);
if(difference != 0)
break;
}while(first[index] != '\0' && second[index++] != '\0');
return difference;
}
/**
@fn string_compare_n()
@brief Compara dos cadenas lexicograficamente hasta cierta longitud
@param `first' es la primera cadena
@param `second' es la segunda cadena
@param `length' es la longitud de las cadenas
@warning Las cadenas no pueden ser NULL
@warning La función no verifica que las cadenas realmente tengan la longitud indicada
@return Un numero negativo si la primera cadena es menor que la segunda, cero si son iguales y un numero positivo si la primera es mayor que la segunda
**/
int string_compare_n(const char* first, const char* second, unsigned int length)
{
int difference;
unsigned int index = 0U;
/*
como ambas cadenas seran comparadas...
hasta una longitud en comun, entonces...
se puede realizar la verificación del bucle al...
principio
*/
for( ; index < length; ++index)
{
difference = static_cast<int>
(first[index] - second[index]);
if(difference != 0)
break;
}
return difference;
}