当前位置: 首页 > news >正文

C语言——字符串比较函数strcmp和strncmp

目录

strcmp

函数原型如下:

示例

注意事项

strcmp自实现代码:

strncmp 函数

函数原型:

参数:

返回值:

特点:

两者之间的区别和联系

strcmp

strcmp 是 C 语言标准库中的一个函数,用于比较两个字符串。它的原型定义在 <string.h> 头文件中。strcmp 函数通过比较字符串中对应位置的字符的 ASCII 值来比较两个字符串。比较是逐字符进行的,直到遇到不同的字符或遇到字符串的终止符 \0 为止。

函数原型如下:

int strcmp(const char *str1, const char *str2);
  • str1 和 str2 是要比较的两个字符串的指针。
  • 函数返回一个整数,该整数的符号表明了 str1 和 str2 的字典序关系:
    • 如果返回值 < 0,则 str1 小于 str2
    • 如果返回值 == 0,则 str1 等于 str2
    • 如果返回值 > 0,则 str1 大于 str2

示例

#include<stdio.h>
#include<string.h>int main()
{char *str1 = "muchangong";char *str2 = "muchangong";int ret;ret = strcmp(str1,str2);printf("ret = %d\n",ret);return 0;
}

输出

ret = 0

注意事项

  • strcmp 是区分大小写的。
  • 当比较字符串时,直到遇到第一个不同的字符或直到任一字符串的结束符 \0 为止。
  • 如果 str1 或 str2 是 NULL,则行为是未定义的。在调用 strcmp 之前,确保字符串指针是有效的。
  • 在某些情况下,如果性能是一个关键因素,并且你知道字符串可能很长且大部分相同,考虑使用 strncmp 函数来比较字符串的前 n 个字符,以减少比较所需的时间。

strcmp自实现代码:

int myStrcmp(char *str1,char *str2)
{int ret;while(*str1 && *str2 && (*str1 == *str2)){str1++;str2++;}ret = *str1 - *str2;if(ret>0){ret = 1;}if(ret<0){ret = -1;}return ret;
}

strncmp 函数

strncmp 函数用于比较两个字符串的前 n 个字符。

  • 函数原型

int strncmp(const char *s1, const char *s2, size_t n);
  • 参数

    • s1:指向要比较的第一个字符串的指针。
    • s2:指向要比较的第二个字符串的指针。
    • n:要比较的最大字符数。
  • 返回值

    • 如果两个字符串的前 n 个字符完全相同,则返回 0。
    • 如果第一个不相同的字符在 s1 中出现在 s2 中之前(按 ASCII 值比较),则返回一个小于 0 的值。
    • 如果第一个不相同的字符在 s2 中出现在 s1 中之前,则返回一个大于 0 的值。
  • 特点

    • 区分大小写。
    • 只比较前 n 个字符,这允许对较长的字符串进行部分比较,或者在不确定整个字符串长度时进行比较。

两者之间的区别和联系

  • 区别
    • strcmp 比较整个字符串,直到遇到终止符 \0
    • strncmp 只比较字符串的前 n 个字符。
  • 联系
    • 两者都用于比较字符串。
    • 两者都区分大小写。
    • 两者都返回整数值来表示比较结果(0 表示相等,小于 0 表示第一个字符串小于第二个字符串,大于 0 表示第一个字符串大于第二个字符串)。

在实际编程中,选择 strcmp 还是 strncmp 取决于具体的需求。如果需要比较整个字符串,则使用 strcmp;如果只需要比较字符串的前部分,或者不确定整个字符串的长度,则使用 strncmp

http://www.lryc.cn/news/405427.html

相关文章:

  • redis的集群模式
  • 基于微信小程序+SpringBoot+Vue的青少年科普教学系统平台(带1w+文档)
  • 智能听觉:从任务特定的机器学习到基础模型
  • 14、如何⽤DDD设计微服务代码模型
  • ArcGIS Pro SDK (九)几何 12 多面体
  • 二次元手游《交错战线》游戏拆解
  • 【BUG】已解决:Downgrade the protobuf package to 3.20.x or lower.
  • Java开发之Redis
  • Java面试八股之 Spring Bean的生命周期
  • SQL中的函数
  • VSCode | 修改编辑器注释的颜色
  • 媒体邀约专访与群访的区别?
  • Pycharm2024最新版community社区版下载安装配置,快速上手
  • 服务器选择租用还是托管?托管和租用哪个比较划算
  • 智能制造·数字化工厂建设规划方案(65P)
  • ACM中国图灵大会专题 | 图灵奖得主Manuel Blum教授与仓颉团队交流 | 华为论坛:面向全场景应用编程语言精彩回顾
  • k8s 公共服务
  • 【数据分析详细教学】全球气温变迁:一个多世纪的数据分析
  • AV1技术学习:Reference Frame System
  • 数学建模(7)——Logistic模型
  • “微软蓝屏”事件,给IT行业带来的宝贵经验和教训
  • QT总结——图标显示坑
  • SQL 注入漏洞详解 - Union 注入
  • Qt创建自定义组件并且promote to之后导致编译错误(CMake)
  • 告别写作瓶颈,4款AI协作工具助你迸发灵感
  • java30-Shiro
  • 【linux驱动开发】卸载驱动时报错:Trying to free already-free IRQ 0
  • SpringBoot如何解决yml明文密码问题
  • SDL常用结构体和函数接口
  • 【数据结构】AVL树(图文解析 + 代码实现)