Skip to content

strncmp

Marcos edited this page Oct 2, 2024 · 1 revision

La función ft_strncmp compara hasta n caracteres de las cadenas s1 y s2. Devuelve un valor menor, igual o mayor que cero si la primera cadena es menor, igual o mayor que la segunda, respectivamente.

Explicación del comando man

STRNCMP(3) (simplified)

NAME
    strncmp -- compare strings
SYNOPSIS
    int strncmp(const char *s1, const char *s2, size_t n);
DESCRIPTION
    The strncmp() function lexicographically compare the null-terminated strings s1 and s2.
    The strncmp() function compares not more than n characters. Because strncmp() is designed for comparing strings rather than binary data, characters that appear after a '\0' character are not compared.
RETURN VALUES
    The strncmp() function returns an integer greater than, equal to, or less than 0, according as the string s1 is greater than, equal to, or less than the string s2. The comparison is done using unsigned characters, so that '\200' is greater than '\0'.

Explicación con mis palabras

La función strncmp() compara hasta n caracteres de las cadenas s1 y s2. Si los caracteres difieren o se alcanza un carácter nulo en cualquiera de las dos cadenas, la comparación se detiene. El valor devuelto es la diferencia entre los valores ASCII de los primeros caracteres que no coinciden. Si las cadenas son iguales en los primeros n caracteres, la función devuelve 0.

Implementación en C

Aquí te muestro mi implementación de la función ft_strncmp en mi proyecto de Libft.

Código de ft_strncmp

#include "libft.h"

int	ft_strncmp(const char *s1, const char *s2, size_t n)
{
	size_t	i;

	i = 0;
	// Comparar hasta n caracteres o hasta encontrar una diferencia
	while (i < n)
	{
		// Si los caracteres son diferentes o encontramos un carácter nulo
		if (s1[i] != s2[i] || s1[i] == '\0' || s2[i] == '\0')
		{
			// Devolvemos la diferencia entre los valores de los caracteres
			return ((unsigned char)s1[i] - (unsigned char)s2[i]);
		}
		i++;
	}
	// Si los primeros n caracteres son iguales, devolvemos 0
	return (0);
}

Main para probar ft_strncmp

El siguiente código es un ejemplo de cómo puedes probar la función ft_strncmp():

#include <stdio.h>

int	ft_strncmp(const char *s1, const char *s2, size_t n);

int main(void)
{
	char str1[] = "Libft";
	char str2[] = "Libfx";
	int result;

	result = ft_strncmp(str1, str2, 4); // Comparamos los primeros 4 caracteres
	printf("Resultado de comparación (4 caracteres): %d\n", result); // Debe devolver 0 (iguales)

	result = ft_strncmp(str1, str2, 5); // Comparamos los primeros 5 caracteres
	printf("Resultado de comparación (5 caracteres): %d\n", result); // Debe devolver un valor distinto de 0 (diferentes)

	return 0;
}

Recomendaciones o ejemplos de uso

  • ¿Por qué usar strncmp?
    strncmp es útil cuando necesitas comparar cadenas pero solo hasta un número limitado de caracteres, lo que es común cuando trabajas con prefijos de cadenas o cuando solo te interesa una parte de las mismas.

  • ¿Cuándo usar strncmp?
    Usa strncmp cuando quieras comparar cadenas pero no necesariamente completas, como por ejemplo al validar si una cadena comienza con ciertos caracteres o si dos cadenas tienen un prefijo común.

Clone this wiki locally