8.4.4 字符串比较函数

在C语言中,函数strcmp和函数strncmp是专门用于比较字符串大小的。函数strcmp的使用格式如下所示。

    strcmp(字符串1,字符串2)

函数strncmp的使用格式如下所示。

    strcmp(字符串1,字符串2,整型表达式)

其中,“字符串1”“字符串2”表示字符串常量或已存放字符串的字符数组名。

函数strcmp的功能描述如下所示。

❑ 如果“字符串1”<“字符串2”,则函数值为小于0的整数。

❑ 如果“字符串1”=“字符串2”,则函数值为0。

❑ 如果“字符串1”>“字符串2”,则函数值为大于0的整数。

函数strncmp的功能是比较字符串1和字符串2的前几个(具体个数由整型表达式指定)字符的大小。具体比较方式如下所示。

❑ 如果“字符串1”<“字符串2”,则函数值为小于0的整数。

❑ 如果“字符串1”=“字符串2”,则函数值为0。

❑ 如果“字符串1”>“字符串2”,则函数值为大于0的整数。

实例8-9

使用strcmp和函数strncmp比较用户输入的字符串

源码路径daima\8\8-9

本实例的实现文件为“compare.c”,具体实现代码如下。

    #include "string.h"
    #include "stdio.h"
    int main(void){
        int m;                      //声明整型变量
        char mm1[80], mm2[80];    //声明两个字符数组
        puts("Please input the first string:");
        //输入提示
        gets_s(mm1);              //接收字符串1
        puts("Please input the second string:");
        //输入提示
        gets_s(mm2);              //接收字符串2
        m=strcmp(mm1, mm2);       //比较两个字符串
        //输出结果
        printf("\nstrcmp(%s, %s) returns %d", mm1, mm2, m);
        m=strncmp(mm1, mm2,3);    //比较两个字符串的前3个字符
        printf("\nComparing 3 characters, strncmp(%s, %s) returns %d", mm1, mm2, m);
        //输出结果
    }

拓展范例及视频二维码

范例8-9-01:比较两个字符串

源码路径:演练范例\8-9-01\

范例8-9-02:自定义字符串比较函数

源码路径:演练范例\8-9-02\

程序运行后先提示用户分别输入两个字符串,输入完毕并按Enter键后,通过函数strcmp和函数strncmp比较两个字符串,并显示比较结果。执行效果如图8-9所示。

图8-9 执行效果

在上述实例代码中,通过函数strcmp和函数strncmp比较用户输入的字符串。读者在具体使用时,应该注意如下两点。

(1)函数strcpy和函数strncpy在进行比较时,要区分字母的大小写。

(2)在C语言中所有的字符串比较函数都是利用ASCII码来比较的,对于相同的字母来说,大写字母要小于小写字母。因为A~Z的ASCII码是95~90,而a~z的ASCII码是97~122。

看下面的代码。

    #include "string.h"
    int main(){
      int k;
      static char st1[15], st2[]="C Language";                   //赋值
      printf("input a string:\n");
      gets(st1);
      k=strcmp(st1, st2);
      if(k==0) printf("st1=st2\n");
      if(k>0) printf("st1>st2\n");
      if(k<0) printf("st1<st2\n");
    }

上述代码把输入的字符串和数组st2中的字符串进行比较,比较结果返回到k中,根据k值再输出结果。当输入为“ddddd”时,由ASCII码可知“ddddd”大于“C Language”,所以k>0,输出结果是st1>st2。