• strcmp函数详解:字符串比较的利器


    目录

    一,strcmp函数的简介

    二,strcmp函数的原理

    三,strcmp函数的用法

    四,strcmp函数的注意事项

    五,strcmp函数的模拟实现


    一,strcmp函数的简介

    strcmp函数是C语言中的字符串比较函数,用于比较两个字符串的大小。

    🍂函数头文件:

    #include 

    🍂函数原型:

    int strcmp ( const char * str1, const char * str2 );
    • 该函数接受两个参数,分别为要比较的两个字符串的指针。
    • 返回值为整形,表示两个字符串的大小关系。 

     🍂函数返回值:

    1. 若str1小于str2,则返回负整数,即小于0的数。
    2. 若str1和str2相等,则返回0
    3. 若str1大于str2,则返回正整数,即大于0的数。

    二,strcmp函数的原理

    strcmp函数的比较规则是按照字典序进行比较,即逐个字符比较。具体的比较过程如下:

    1. 若两个字符相等,则继续比较下一个字符。
    2. 若两个字符不相等,则返回它们的ASCII码差值(ASCII码值大的字符串大)。

    三,strcmp函数的用法

    1. #include
    2. #include
    3. int main()
    4. {
    5. char str1[] = "appple";
    6. char str2[] = "banana";
    7. int ret = strcmp(str1, str2);
    8. if (ret == 0)
    9. printf("str1和str2相等\n");
    10. else if (ret > 0)
    11. printf("str1大于str2\n");
    12. else
    13. printf("str1小于str2\n");
    14. return 0;
    15. }

    🍂运行结果: 

    四,strcmp函数的注意事项

    1,字符串的比较是按照字典序进行的,因此大小写字母的比较结果不同。

    1. #include
    2. #include
    3. int main()
    4. {
    5. char str1[] = "hello";
    6. char str2[] = "HELLO";
    7. int ret = strcmp(str1, str2);
    8. if (ret == 0)
    9. printf("str1和str2相等\n");
    10. else if (ret > 0)
    11. printf("str1大于str2\n");
    12. else
    13. printf("str1小于str2\n");
    14. return 0;
    15. }

     🍂运行结果: 

    2,在比较字符串时,需要确保字符串以'\0'结尾,否则可能会导致比较结果不正确。

    1. #include
    2. #include
    3. int main()
    4. {
    5. char str1[] = "hello";
    6. char str2[] = "hello";
    7. str1[5] = '!';
    8. int ret = strcmp(str1, str2);
    9. if (ret == 0)
    10. printf("str1和str2相等\n");
    11. else if (ret > 0)
    12. printf("str1大于str2\n");
    13. else
    14. printf("str1小于str2\n");
    15. return 0;
    16. }

     🍂运行结果: 

      

    🍂分析: 

    在这段代码中,我们将str1字符串的结尾标识符'\0'改成了'!',运行代码后,输出结果为"str1大于str2"。这是因为str1字符串没有以'\0'结尾,所以strcmp函数会继续比较下去,直到遇到str2字符串的结尾标识符'\0'。由于str1字符串比str2字符串长,所以str1被认为是大于str2。

    五,strcmp函数的模拟实现

    1. #include
    2. #include
    3. #include
    4. int my_strcmp(const char* str1, const char* str2)
    5. {
    6. assert(str1 && str2);
    7. while (*str1 == *str2)
    8. {
    9. if (*str1 == '\0')
    10. return 0;//相等
    11. str1++;
    12. str2++;
    13. }
    14. if (*str1 > *str2)
    15. return 1;//大于
    16. else
    17. return -1;//小于
    18. }
    19. int main()
    20. {
    21. char str1[] = "appple";
    22. char str2[] = "banana";
    23. int ret = my_strcmp(str1, str2);
    24. if (ret == 0)
    25. printf("str1和str2相等\n");
    26. else if (ret > 0)
    27. printf("str1大于str2\n");
    28. else
    29. printf("str1小于str2\n");
    30. return 0;
    31. }
  • 相关阅读:
    固定资产管理中净值怎么算
    IEEE出版社旗下期刊的投稿整理——(更新ing)
    python数据类型之间的互相转换
    聊聊氮化硅(SiNx)在芯片中的重要性
    Java 网络编程 —— Socket 详解
    <哈希及模拟实现>——《C++高阶》
    C++用hiredis访问redis
    【毕业设计】基于STM32的自动加油站加油系统 -物联网 单片机 嵌入式
    2万6千字,带您领略Linux命令的强大
    Day818.电商系统的分布式事务调优 -Java 性能调优实战
  • 原文地址:https://blog.csdn.net/weixin_65931202/article/details/133700063