std::strncmp() en C++

La función std::strncmp() compara lexicográficamente no más que contar caracteres de las dos strings terminadas en nulo y devuelve un número entero basado en el resultado.

  • Esta función toma dos strings y un número num como argumentos y compara como máximo los primeros num bytes de ambas strings.
  • num debe ser como máximo igual a la longitud de la string más larga. Si num se define mayor que la longitud de la string, la comparación se realiza hasta el carácter nulo (‘\ 0’) de cualquiera de las strings.
  • Esta función compara lexicográficamente las dos strings. Comienza la comparación desde el primer carácter de cada string. Si son iguales entre sí, continúa y compara el siguiente carácter de cada string y así sucesivamente.
  • Este proceso de comparación se detiene hasta que se alcanza un carácter nulo de terminación de cualquiera de las strings o el número de caracteres de ambas strings coincide.

Sintaxis:

int strncmp(const char *str1, const char *str2, size_t count);

Parameters:
str1 and str2: C string to be compared.
count: Maximum number of characters to compare.
 size_t is an unsigned integral type.

Return Value: 
Value                               Meaning
Less than zero                      str1 is less than str2.
Zero                                str1 is equal to str2.
Greater than zero                   str1 is greater than str2.

Si hay menos de contar caracteres en cualquiera de las strings, la comparación finaliza cuando se encuentra el primer valor nulo.

¿Qué devuelve strcmp()?

La función strncmp() devuelve tres tipos diferentes de valores enteros sobre la base de la comparación:

1. Mayor que cero ( >0 ): se devuelve un valor positivo si un carácter de str1 y str2 no coincide antes que el número de caracteres y el valor ASCII del carácter str1 es mayor que el valor ASCII del carácter str2 . Como resultado, podemos decir que str1 es lexicográficamente mayor que str2 .

// C, C++ program to demonstrate
// functionality of strncmp()
  
#include <stdio.h>
#include <string.h>
  
int main()
{
    // Take any two strings
    char str1[10] = "aksh";
    char str2[10] = "akash";
  
    // Compare strings using strncmp()
    int result = strncmp(str1, str2, 4);
  
    if (result == 0) {
        // num is the 3rd parameter of strncmp() function
        printf("str1 is equal to str2 upto num characters\n");
    }
    else if (result > 0)
        printf("str1 is greater than str2\n");
    else
        printf("str2 is greater than str1\n");
  
    printf("Value returned by strncmp() is: %d", result);
  
    return 0;
}

Producción:

str1 is greater than str2
Value returned by strncmp() is: 18

2. Menos de cero (<0): se devuelve un valor negativo si un carácter de str1 y str2 no coincide antes que el número de caracteres y el valor ASCII del carácter str1 es menor que el valor ASCII del carácter str2 . Como resultado, podemos decir que str2 es lexicográficamente mayor que str1 .

// C, C++ program to demonstrate
// functionality of strncmp()
  
#include <stdio.h>
#include <string.h>
  
int main()
{
    // Take any two strings
    char str1[10] = "akash";
    char str2[10] = "aksh";
  
    // Compare strings using strncmp()
    int result = strncmp(str1, str2, 4);
  
    if (result == 0) {
        // num is the 3rd parameter of strncmp() function
        printf("str1 is equal to str2 upto num characters\n");
    }
    else if (result > 0)
        printf("str1 is greater than str2\n");
    else
        printf("str2 is greater than str1\n");
  
    printf("Value returned by strncmp() is: %d", result);
  
    return 0;
}

Producción:

str2 is greater than str1
Value returned by strncmp() is: -18

3. Igual a cero (0): esta función devuelve cero si los caracteres de str1 coinciden con los caracteres de str2 hasta un número de caracteres. Como resultado, no podemos decir que str1 es igual a str2 , hasta que num sea igual a la longitud de cualquiera de las strings.

// C, C++ program to demonstrate
// functionality of strncmp()
  
#include <stdio.h>
#include <string.h>
  
int main()
{
    // Take any two strings
    char str1[10] = "akash";
    char str2[10] = "akas";
  
    // Compare strings using strncmp()
    int result = strncmp(str1, str2, 4);
  
    if (result == 0) {
        // num is the 3rd parameter of strncmp() function
        printf("str1 is equal to str2 upto num characters\n");
    }
    else if (result > 0)
        printf("str1 is greater than str2\n");
    else
        printf("str2 is greater than str1\n");
  
    printf("Value returned by strncmp() is: %d", result);
  
    return 0;
}

Producción:

str1 is equal to str2 upto num characters
Value returned by strncmp() is: 0

Nota: Cuando las strings no son las mismas, encontrará que el valor devuelto por la función strncmp() es la diferencia entre los valores ASCII del primer carácter no coincidente en str1 y str2 en ambos casos.

Más ejemplos

Ejemplo 1:

// CPP program to illustrate strncmp()
#include <cstring>
#include <iostream>
  
void display(char* abc, char* xyz, int res, int count)
{
    if (res > 0)
        std::cout << xyz << " come-before " << abc;
    else if (res < 0)
        std::cout << abc << " come-before " << xyz;
    else
        std::cout << "First " << count << " characters of string " 
        << abc << " and " << xyz << " are same";
}
  
int main()
{
    char abc[] = "GeeksforGeeks";
    char xyz[] = "Geeks";
    int res;
    res = std::strncmp(abc, xyz, 4);
    display(abc, xyz, res, 4);
    return 0;
}

Producción:

First 4 characters of string GeeksforGeeks and Geeks are same

Ejemplo 2:

// CPP program to illustrate strncmp()
#include <cstring>
#include <iostream>
  
void display(char* abc, char* xyz, int res, int count)
{
    if (res > 0)
        std::cout << xyz << " come-before " << abc;
    else if (res < 0)
        std::cout << abc << " come-before " << xyz;
    else
        std::cout << "First " << count << " characters of string " << 
        abc << " and " << xyz << " are same";
    ;
}
  
int main()
{
    char abc[] = "GeeksforGeeks";
    char xyz[] = "Geeks";
    int res;
    res = std::strncmp(abc, xyz, 6);
    display(abc, xyz, res, 6);
    return 0;
}

Producción:

Geeks come-before GeeksforGeeks

Este artículo es una contribución de Akash Gupta y Shivani Ghughtyal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *