C Language Comparsa: strcmp (), strncmp (), strcasecmp (), strncasecmp ()


Esempio

Le strcase* non sono Standard C, ma un'estensione POSIX.

La funzione strcmp confronta lessicograficamente due array di caratteri con terminazione null. Le funzioni restituiscono un valore negativo se il primo argomento compare prima del secondo in ordine lessicografico, zero se si confronta uguale o positivo se il primo argomento compare dopo il secondo in ordine lessicografico.

#include <stdio.h>
#include <string.h>

void compare(char const *lhs, char const *rhs)
{
    int result = strcmp(lhs, rhs); // compute comparison once
    if (result < 0) {
        printf("%s comes before %s\n", lhs, rhs);
    } else if (result == 0) {
        printf("%s equals %s\n", lhs, rhs);
    } else { // last case: result > 0
        printf("%s comes after %s\n", lhs, rhs);
    }
}

int main(void)
{
    compare("BBB", "BBB");
    compare("BBB", "CCCCC");
    compare("BBB", "AAAAAA");
    return 0;
}

Uscite:

BBB equals BBB
BBB comes before CCCCC
BBB comes after AAAAAA

Come strcmp , la funzione strcasecmp confronta anche lessicograficamente i suoi argomenti dopo aver tradotto ciascun carattere nel suo corrispondente in lettere minuscole:

#include <stdio.h>
#include <string.h>

void compare(char const *lhs, char const *rhs)
{
    int result = strcasecmp(lhs, rhs); // compute case-insensitive comparison once
    if (result < 0) {
        printf("%s comes before %s\n", lhs, rhs);
    } else if (result == 0) {
        printf("%s equals %s\n", lhs, rhs);
    } else { // last case: result > 0
        printf("%s comes after %s\n", lhs, rhs);
    }
}

int main(void)
{
    compare("BBB", "bBB");
    compare("BBB", "ccCCC");
    compare("BBB", "aaaaaa");
    return 0;
}

Uscite:

BBB equals bBB
BBB comes before ccCCC
BBB comes after aaaaaa

strncmp e strncasecmp confrontano al massimo n caratteri:

#include <stdio.h>
#include <string.h>

void compare(char const *lhs, char const *rhs, int n)
{
    int result = strncmp(lhs, rhs, n); // compute comparison once
    if (result < 0) {
        printf("%s comes before %s\n", lhs, rhs);
    } else if (result == 0) {
        printf("%s equals %s\n", lhs, rhs);
    } else { // last case: result > 0
        printf("%s comes after %s\n", lhs, rhs);
    }
}

int main(void)
{
    compare("BBB", "Bb", 1);
    compare("BBB", "Bb", 2);
    compare("BBB", "Bb", 3);
    return 0;
}

Uscite:

BBB equals Bb
BBB comes before Bb
BBB comes before Bb