/*Este codigo se cede al dominio publico*/
/**
@fn string_equals()
@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 `true' si la primera es igual a la segunda, `false' sino
**/
bool string_equals(const char* first, const char* second)
{
bool equals = true;
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
{
if(first[index] != second[index])
{
equals = false;
break;
}
}while(first[index] != '\0' && second[index++] != '\0');
return equals;
}
/**
@fn string_equals_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 `true' si la primera es igual a la segunda, `false' sino
**/
bool string_equals_n(const char* first, const char* second, unsigned int length)
{
bool equals = true;
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)
if(first[index] != second[index])
{
equals = false;
break;
}
return equals;
}
/*Macro que verifica que dos cadenas no sean iguales*/
#define string_not_equals(first, second) (!string_equals(first, second))
/*Macro que verifica que dos cadenas no sean iguales hasta cierta longitud*/
#define string_not_equals_n(first, second, length) (!string_equals(first, second, length))