Zeichenvergleich in C

Lesezeit: 3 Minuten

Benutzeravatar von dclark
dclark

Ich versuche, zwei Zeichen zu vergleichen, um zu sehen, ob einer größer als der andere ist. Um zu sehen, ob sie gleich waren, benutzte ich strcmp. Gibt es etwas ähnliches strcmp die ich verwenden kann?

  • Wie wäre es mit == und >?

    – Kerrek SB

    29. März 2014 um 20:16 Uhr

  • Wenn Sie den Rat von Kerreks befolgen, denken Sie daran, es zu verwenden unsigned char.

    – Deduplizierer

    29. März 2014 um 20:18 Uhr

  • Kerreks Kommentar ist die Antwort, es sei denn, Sie haben detailliertere Einzelheiten, die Sie nicht erwähnt haben. Versuchen Sie, in diesem Fall ein Beispiel zu geben.

    – Utkan Geser

    29. März 2014 um 20:18 Uhr

  • Vergleichen Sie Zeichen oder Zeichenfolgen? Es ist aus Ihrer Frage unklar, da Sie die Verwendung erwähnt haben strcmp. Könnten Sie bitte Beispiele für das geben, was Sie wollen?

    – Schleicher

    29. März 2014 um 20:19 Uhr

  • Verwenden strcmp() Saiten zu vergleichen. Der Rückgabewert ist 0, wenn die Zeichenketten gleich sind. Der Rückgabewert von strcmp() gibt auch die Reihenfolge an: Der Wert ist < 0 oder > 0, um anzugeben, um welche Zeichenfolge es sich handelt kleiner oder größer.

    – chux – Wiedereinsetzung von Monica

    29. März 2014 um 20:30 Uhr


Benutzeravatar von Victor
Sieger

EIN char Variable ist eigentlich ein ganzzahliger 8-Bit-Wert. Es wird Werte von haben 0 zu 255. Das sind fast immer ASCII-Codesaber andere Kodierungen sind erlaubt. 0 steht für das C-Null-Zeichen und 255 steht für ein leeres Symbol.

Also, wenn Sie die folgende Aufgabe schreiben:

char a="a"; 

Es ist dasselbe wie auf einem ASCII-System.

char a = 97;

Sie können also zwei vergleichen char Variablen mit der >, <, ==, <=, >= Betreiber:

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);

Beachten Sie, dass diese Funktion auch dann funktioniert, wenn ASCII nicht erforderlich ist, da C erfordert, dass die Ziffern in fortlaufender Reihenfolge sind:

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

  • Diese Frage ist mit C markiert.

    – Utkan Geser

    29. März 2014 um 20:30 Uhr

  • Entschuldigung für den Nit: “0 steht für die NULL”? vielleicht ASCII NUL oder das C-Nullzeichen, aber nicht NULL.

    – chux – Wiedereinsetzung von Monica

    29. März 2014 um 20:33 Uhr

  • Das tut mir leid. Mein Fehler!

    – Viktor

    29. März 2014 um 20:36 Uhr

  • Vergleichsoperator muss oben korrigiert werden, if( a == b )

    – Saurabh

    15. März 2016 um 5:47 Uhr

  • Das hätte ich nicht gesehen. Vielen Dank!

    – Viktor

    15. März 2016 um 7:49 Uhr

Benutzer-Avatar von Vorsprung
Vorsprung

In C hat der Typ char einen numerischen Wert, sodass der Operator > zum Beispiel gut funktioniert

#include <stdio.h>
main() {

    char a="z";

    char b='h';

    if ( a > b ) {
        printf("%c greater than %c\n",a,b);
    }
}

  • Bedeutet das wirklich, dass a < B ?

    – Andrew Paul Simmons

    25. Oktober 2015 um 11:32 Uhr

  • @AndrewPaulSimmons ‘a’ ASCII-Code dezimal 97 ist NICHT kleiner als ‘B’ ASCII-Code dezimal 66. Wenn Sie einen Vergleich zwischen Groß- und Kleinschreibung benötigen, verwenden Sie tolower() für beide Argumente

    – Vorsprung

    26. Oktober 2015 um 15:15 Uhr

Ich glaube, Sie versuchen, zwei Zeichenfolgen zu vergleichen, die Werte darstellen. Die Funktion, nach der Sie suchen, lautet:

int atoi(const char *nptr);

oder

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

Mit diesen Funktionen können Sie einen String in einen int/long int konvertieren:

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

und mit einem anderen Wert vergleichen.

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;
}

Sie müssen Ihre eigene Art und Weise entwickeln, Charaktere zu vergleichen. Der C-Standard schreibt nur vor, dass die Ziffern 0 bis 9 eine einfache Möglichkeit haben, sie mit Basic zu vergleichen c1 > c2 Stil Vergleich. Dies funktioniert NICHT garantiert für andere Zeichen wie Buchstaben. (Obwohl es in der Praxis oft für einfache ASCII-Bereiche wie az und AZ gilt.)

Eine oft unbefriedigende Möglichkeit besteht darin, die Zeichen in Zeichenfolgen umzuwandeln und zu verwenden strcoll().

1386940cookie-checkZeichenvergleich in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy