c语言怎么进行字符串比较


本文摘自PHP中文网,作者青灯夜游,侵删。

比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、strncmp()或strnicmp(),区分大小写的比较字符串的前n个字符。

本教程操作环境:windows7系统、c99版本、Dell G3电脑。

使用bcmp()--比较内存(字符串)的前n个字节是否相等

原型为:

1

int bcmp(const void *s1, const void * s2, int n);

【参数】s1, s2 为需要比较的两块内存(或两个字符串),n 为要比较的长度。

【返回值】如果 s1, s2 的前 n 个字节相等或者 n 等于 0,则返回 0,否则返回非 0 值。

bcmp() 函数不检查NULL。

实际上,bcmp() 和 memcmp() 功能相同,用来比较内存块的前 n 个字节是否相等,但是 s1, s2 两个参数为指针,又很奇怪的位于 string.h 文件中,也可以用来比较字符串。

示例:

1

2

3

4

5

6

7

8

9

10

11

12

#include <stdio.h>

#include <string.h>

int main ()

{

    char *s1 = "Golden Global View";

    char *s2 = "Golden Global View";

    if( !bcmp(s1, s2, 7) )

        printf("s1 equal to s2 in first 7 bytes");

    else

        printf("s1 not equal to s2 in first 7 bytes");

    return 0;

}

使用strcmp()--比较字符串(区分大小写)

其原型为:

1

int strcmp(const char *s1, const char *s2);

【参数】s1, s2 为需要比较的两个字符串。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。

注意:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符。

示例:

1

2

3

4

5

6

7

8

9

10

#include <string.h>

main(){

    char *a = "aBcDeF";

    char *b = "AbCdEf";

    char *c = "aacdef";

    char *d = "aBcDeF";

    printf("strcmp(a, b) : %d\n", strcmp(a, b));

    printf("strcmp(a, c) : %d\n", strcmp(a, c));

    printf("strcmp(a, d) : %d\n", strcmp(a, d));

}

输出:

1

2

3

strcmp(a, b) : 32

strcmp(a, c) :-31

strcmp(a, d) : 0

使用stricmp()--比较字符串(不区分大小写)

原型为:

1

int strcmp(char *s1, char *s2);

【参数说明】s1, s2 为需要比较的两个字符串。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。stricmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。

注意:stricmp()是Windows下特有的,linux下具有相同功能的函数是strcasecmp(),包含在头文件strings.h下。

另外一个不区分大小写比较字符串的函数是strcmpi(),strcmpi()是stricmp()的宏定义,实际未提供此函数。

示例:比较两个字符串的大小。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#include<stdio.h>

#include<string.h>

int main(void)

{

    /*定义两个字符串*/

    char* s1 = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";

    char* s2 = "http://see.xidian.edu.cn/cpp/shujujiegou/";

    /*比较字符串(不分大小写)*/

    int result = stricmp(s1,s2);  // 也可以改成strcmpi()

    if(result>0)

    {

        printf("Result: s1 > s2");

    }

    else if(result<0)

    {

        printf("Result: s1 < s2");

    }

    else if(result == 0)

    {

        printf("Result: s1 = s2");

    }  

    getchar();/*等待用户输入个字符,然后退出*/

    return 0;

}

输出:

1

Result: s1 > s2

使用strncmp()--比较字符串的前n个字符(区分大小写)

阅读剩余部分

相关阅读 >>

C语言char是什么意思

C语言中什么是转义字符

C语言中的语句之间必须用分号作为分隔符吗?

C语言怎么输入十个数输出最大值

C语言struct用法详解

C语言标识符有哪三类?

C语言取余符号是什么

C语言规定,函数返回值的类型是由什么决定的?

C语言中pow函数的用法是什么?

C语言中整除符号怎么表示?

更多相关阅读请进入《C语言》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...