Tecnología

Inicio

C para la función strcmp

C para la función strcmp


C ++ ya contiene una función de cadena de comparación - "strcmp ()" - que lleva a cabo la tarea de comparar dos cadenas para la igualdad. La función strcmp () devuelve valores diferentes dependiendo de la relación de las cuerdas entre sí. La implementación de una función strcmp () difiere entre las arquitecturas de computadora (o permanece bajo licencia de diferentes proveedores), pero un programador puede volver a implementar la funcionalidad básica del código para ver cómo funciona. Para entender la función, sin embargo, el programador debe entender como cadenas, matrices y punteros de trabajo en C y C ++.

Cuerda, Arrays y punteros

En C, las cadenas son colecciones (o matrices) de caracteres. Por ejemplo,

char string [10];

Como una matriz de 10 caracteres, "cadena" representa una sentencia en C. Sin embargo, las matrices son en realidad punteros, o variables que se refieren a la dirección de memoria. La matriz de "cadena" en realidad representa un puntero al primer elemento en el bloque de memoria, y el programador puede hacer referencia a los otros elementos de la matriz a través de este puntero.

La definición de "strcmp ()"

La definición básica de una función strcmp será similar a esto:

int strcmp (const char cadena1, cadena2 const char);

Por definición, una función de comparación de cadena utilizará dos matrices de caracteres (str1, str2). Dado que las matrices representan punteros, la definición se llevará a dos punteros a carácter. Con estos indicadores, el programador puede comprobar cada elemento de una matriz contra la otra matriz. En primer lugar, sin embargo, el programador debe declarar dos variables de carácter, que contendrá los valores encontrados en las dos cadenas:

int strcmp (const str1 char, const str2 char) {

char a, b;

}

Atravesando las cadenas

Con el fin de comparar las cadenas, la función debe comparar cada carácter en cada cadena a la otra. Para ello, el programador utiliza los dos punteros (cadena1, cadena2) para desplazarse hacia abajo cada matriz:

mientras que (str1! = '\ 0' && cadena1 == cadena2 *) {

str1 ++; // Mueve el puntero de la cadena str1 al siguiente carácter

str2 ++; // Hace lo mismo, str2

}

El bucle while que hace la búsqueda: en primer lugar, si cadena1 realiza un carácter de terminación ( "\ 0", que se anexa al final de las cadenas por el lenguaje C), a continuación, se cierra el bucle, debido a que la cadena se realiza. En segundo lugar, si el valor de cadena1 (cadena1) no es igual al valor de str2 (str2), entonces el bucle se detiene, porque las cuerdas son desiguales.

Devolviendo el resultado

STRCMP devuelve uno de tres resultados: 0 (si las cadenas son iguales), 1 (si el primero es mayor que el segundo) y -1 (si el primero es menor que el segundo):

char a = * str1;

Char = b * str2;

si (a == b)

{Return 0;}

más

{Return ((a <b) -1: 1);}

Dado que los bucles se detienen cuando hay desigualdad o cuando ambos están acabados, el resultado va a terminar como dos personajes iguales (el símbolo '\ 0') o los caracteres que se encuentran desiguales.

Código completa

El código completo, entonces, es similar a esto (y las implementaciones pueden variar, dependiendo de la técnica o de las condiciones del sistema):

int strcmp (const str1 char, const str2 char) {

char a, b;

mientras que (str1! = '\ 0' && cadena1 == cadena2 *) {

str1 ++; // Mueve el puntero de la cadena str1 al siguiente carácter

str2 ++; // Hace lo mismo, str2

}

char a = * str1;

Char = b * str2;

si (a == b)

{Return 0;}

más

{Return ((a <b) -1: 1);}

}

entrar en dos cadenas, tales como

Char cadena1 [40] = "Esto es una cadena";

Char cadena2 [40] = "Esto es una cadena";

int resultado = strcmp (cadena1, cadena2);

devolverá 0;