Char-vergelijking in C

Ik probeer twee tekens te vergelijken om te zien of de ene groter is dan de andere. Om te zien of ze gelijk waren, gebruikte ik strcmp. Is er iets dat lijkt op strcmp dat ik kan gebruiken?


Antwoord 1, autoriteit 100%

Een char variabele is eigenlijk een 8-bits integrale waarde. Het heeft waarden van 0 tot 255. Dit zijn bijna altijd ASCII-codes, maar andere coderingen zijn toegestaan. 0 staat voor het C-null-teken en 255 staat voor een leeg symbool.

Dus, als je de volgende opdracht schrijft:

char a = 'a'; 

Het is hetzelfde als dit op een ASCII-systeem.

char a = 97;

Je kunt dus twee char-variabelen vergelijken met de >, <, ==, <=, >= operatoren:

char a = 'a';
char b = 'b';
if( a < b ) printf("%c is smaller than %c", a, b);
if( a > b ) printf("%c is smaller than %c", a, b);
if( a == b ) printf("%c is equal to %c", a, b);

Merk op dat zelfs als ASCII niet vereist is, deze functie werkt omdat C vereist dat de cijfers in opeenvolgende volgorde staan:

int isdigit(char c) {
    if(c >= '0' && c <= '9') 
        return 1;
    return 0;
} 

Antwoord 2, autoriteit 41%

In C heeft het char-type een numerieke waarde, dus de > operator werkt bijvoorbeeld prima

#include <stdio.h>
main() {
    char a='z';
    char b='h';
    if ( a > b ) {
        printf("%c greater than %c\n",a,b);
    }
}

Antwoord 3, autoriteit 7%

Ik denk dat je twee strings probeert te vergelijken die waarden vertegenwoordigen, de functie die je zoekt is:

int atoi(const char *nptr);

of

long int strtol(const char *nptr, char **endptr, int base);

met deze functies kun je een string converteren naar een int/long int:

int val = strtol("555", NULL, 10);

en vergelijk het met een andere waarde.

int main (int argc, char *argv[])
{
    long int val = 0;
    if (argc < 2)
    {
        fprintf(stderr, "Usage: %s number\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    val = strtol(argv[1], NULL, 10);
    printf("%d is %s than 555\n", val, val > 555 ? "bigger" : "smaller");
    return 0;
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes