• 详解字符串比较函数:strcmp函数及其模拟实现


    详解字符串比较函数:strcmp函数及其模拟实现!!!

    对于字符串比较函数:strcmp函数,想必大家也不会感觉陌生,毕竟在之前就有过接触!虽然很少使用,但是,见面了也能认出来!只不过不太怎么使用过罢了!!

    话不多说,笔者下面进入正题,来带领大家回归今日的主题!

    strcmp是字符串的比较函数,该比较多不是字符串的长度,而是比较的对应位置的ASCII码值的大小!

    使用方法为:

    int strcmp (const char* str1 , const char* str2)

    对于返回类型为int ,或许不少老铁有着……疑问??为什么返回值会是int(整型)呢??

    str1 < str2 : 返回一个小于0的数字:-1

    str1 > str2  :返回一个大于0的数字: 1

    str1 = str2  :返回0

    对于上述不认同的读者,可以参考一下,笔者的代码:

    1. #include
    2. #include
    3. int main()
    4. {
    5. char arr1[] = "abcdef";
    6. char arr2[] = "abq";
    7. int ret = strcmp(arr1, arr2);
    8. printf("%d\n", ret);
    9. return 0;
    10. }

    因为在ASCII码中’c'对应的值小于'q'所对应的值,所以打印的结果为-1

    代码的运行结果为:

     但是当arr1[],arr2[]更改数值以后,代码的运行结果也会随之发生改变,所以……嗯!所以返回值为:-1,1,0;没啥大问题!!

    1. #include <stdio.h>
    2. #include <string.h>
    3. int main()
    4. {
    5. char arr1[] = "abcdef";
    6. char arr2[] = "abq";
    7. char arr3[] = "abcd";
    8. char arr4[] = "abc";
    9. char arr5[] = "abc";
    10. char arr6[] = "abc";
    11. int ret = strcmp(arr1, arr2);
    12. if (ret > 0)
    13. {
    14. printf("arr1>arr2\n");
    15. }
    16. else if (ret < 0)
    17. {
    18. printf("arr1);
    19. }
    20. else
    21. {
    22. printf("arr1=arr2\n");
    23. }
    24. return 0;
    25. }

    但是,对于:arr1[]={'a','b','c'},与arr2[]={'a','b','c'};该如何进行比较??

    原因在于:'\0'的位置未知,不知道该怎么……嗯,因此,这就需要我们注意细节!!

    下面来对strcmp函数来进行模拟实现!!请各位老铁仔细欣赏!!

    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <assert.h>
    4. int my_strcmp(const char* s1, const char* s2)
    5. {
    6. assert(s1 && s2);
    7. while (*s1 == *s2)
    8. {
    9. if (s1 == '\0')
    10. {
    11. return 0;
    12. }
    13. s1++;
    14. s2++;
    15. }
    16. if (*s1 > *s2)
    17. {
    18. return 1;
    19. }
    20. else
    21. {
    22. return -1;
    23. }
    24. }
    25. int main()
    26. {
    27. char arr1[] = "abcdef";
    28. char arr2[] = "abq";
    29. int ret = my_strcmp(arr1, arr2);
    30. if (ret > 0)
    31. {
    32. printf("arr1>arr2\n");
    33. }
    34. else if (ret < 0)
    35. {
    36. printf("arr1);
    37. }
    38. else
    39. {
    40. printf("arr1==arr2\n");
    41. }
    42. return 0;
    43. }

    对于该段代码的解析,毕竟没有什么很多的重要内容,想必各位老铁也都能看懂,缺少的仅仅是思路而已,笔者在此就不做更多的讲解!!

    代码的运行结果为:

     本篇博客主要内容到此结束!!

  • 相关阅读:
    [附源码]Python计算机毕业设计Django企业售后服务管理系统
    算法(三)
    深度解析NLP定义、应用与PyTorch实战
    01、前言
    「优选算法刷题」:比较含退格的字符串
    被疫情占据的上半年,你还好么?| 2022年中总结
    在 Ubuntu 22.04安装配置 Ansible
    PHP:namespace 关键字和 __NAMESPACE__ 常量
    【ESP8266】ESP12S/12F 最小系统设计及typeC自动下载电路设计
    《恋上数据结构与算法》第1季:双向链表实现(超详细笔记,图文并茂)
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/127067650