繁体   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