簡體   English   中英

C 中的字符比較

[英]Char Comparison in C

我正在嘗試比較兩個字符以查看一個是否大於另一個。 為了查看它們是否相等,我使用了strcmp 有什么類似於我可以使用的strcmp的東西嗎?

char變量實際上是一個 8 位整數值。 它將具有從0255值。 這些幾乎都是ASCII 碼,但也允許使用其他編碼。 0代表 C-null 字符, 255代表空符號。

因此,當您編寫以下作業時:

char a = 'a'; 

這與 ASCII 系統上的相同。

char a = 97;

因此,您可以使用><==<=>=運算符比較兩個char變量:

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

請注意,即使不需要 ASCII,此函數也會起作用,因為 C 要求數字按連續順序排列:

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

在 C 中,char 類型有一個數值,因此 > 運算符將正常工作,例如

#include <stdio.h>
main() {

    char a='z';

    char b='h';

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

我相信您正在嘗試比較表示值的兩個字符串,您正在尋找的函數是:

int atoi(const char *nptr);

或者

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

這些函數將允許您將字符串轉換為 int/long int:

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

並將其與另一個值進行比較。

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

您將不得不推出自己的比較角色的方式。 C 標准僅要求數字 0 到 9 具有使用基本c1 > c2樣式比較的簡單方法來比較它們。 這不保證適用於其他字符,如字母。 (盡管在實踐中它通常適用於簡單的 ASCII 范圍,如 az 和 AZ。)

一種通常不能令人滿意的方法是將字符轉換為字符串並使用strcoll()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM