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?
Zeichenvergleich in C
dclark
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
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()
.
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 vonstrcmp()
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