一文吃透strcmp函数

article/2025/11/8 13:22:08

年轻是我们唯一拥有权利去编织梦想的时光!💓💓💓

文章目录

    • •🌙写在前面
    • • 🍋1.函数介绍
      • • 🌰1.1.函数接口
      • • 🌰1.2.函数分析
      • • 🌰1.3.函数的简单使用
      • • 🌰1.4.函数使用结果分析
    • • 🍋2.库函数strcmp源代码
      • • 🌰2.1.库函数源代码
      • • 🌰2.2.库函数分析
    • • 🍋3.模拟实现 strcmp 函数
      • • 🌰3.1.模拟实现
      • • 🌰3.2.模拟实现分析
    • • 🌙写在后面

•🌙写在前面

💖💖💖Hello,大家好啊,我是vince,小白一名,撰写博客::⭐️一为更好的锻炼自己,巩固知识;:⭐️二为和大家一起在代码的海洋里探索。

如果大家感兴趣的话 ——🎉🎉🎉 欢迎关注csdn博客:< vince >,我们互相学习,共同进步哈~🌟

今天vince将和大家一起去一一吃透字符串函数,接下来我将一篇文章介绍一个函数,这样大家在学习时也不会因为文章过长而劳累厌倦。☀️


 🎉🎉🎉strcmp函数详解如下🎉🎉🎉

在这里插入图片描述

• 🍋1.函数介绍

• 🌰1.1.函数接口

int __cdecl strcmp (const char * src,const char * dst);

这里是库函数里面的函数定义接口。这个函数是将 src 和 dst 两个字符串进行比较,即为字符串比较函数。


• 🌰1.2.函数分析

💯分析:
1、strcmp 函数是比较两个字符串中字符的顺序的。实际上是拿其字符的ASCⅡ码值来进行比较;
2、拿第一个字符串中的第一字符值减去第二个字符串中的第一个字符,如果为 0,则继续向下比较;若不为 0,则返回差值的数。
3、标准规定:
 第一个字符串大于第二个字符串,则返回大于 0 的数字;
 第一个字符串等于第二个字符串,则返回 0;
 第一个字符串小于第二个字符串,则返回小于 0 的数字。


• 🌰1.3.函数的简单使用

#include <stdio.h>
#include <string.h>
int main()
{char ch1[] = "fbcd";char ch2[] = "ab";int ret = strcmp(ch1, ch2);printf("%d\n", ret);return 0;
}

运行结果:
❓ 为什么这里结果为1呢而不是其他大于0的数?来看看下面的分析在这里插入图片描述


• 🌰1.4.函数使用结果分析

💯分析:
先来看看俩字符串第一个字符在内存中的ASCⅡ值:在这里插入图片描述
上面函数分析里面说了两个字符的ASCⅡ值进行比较之后,不相等的返回大于0的数;因此这里返回的是1。在vs编译器的库函数中对于strcmp函数来说,比较两个字符串ASCⅡ值大于 0 的就都返回 1;小于 0 的就都返回 -1。,当然这里是同意规定了一下,我们还可以不规定,直接返回他们的差值,这样返回的差值也是大于 0 的数和小于 0 的数。

在这里插入图片描述

• 🍋2.库函数strcmp源代码

• 🌰2.1.库函数源代码

int __cdecl strcmp (const char * src,const char * dst)
{int ret = 0 ;while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst){++src, ++dst;}return ((-ret) < 0) - (ret < 0); }

• 🌰2.2.库函数分析

💯分析:
1、这里面先用 unsigned char * 将其指针转化为无符号型,在去取里面存的值,即得到字符的ASCⅡ值;
2、return ((-ret) < 0) - (ret < 0); 这一句就是让差值大于 0 的返回 1;差值小于0的返回 -1。

在这里插入图片描述

• 🍋3.模拟实现 strcmp 函数

• 🌰3.1.模拟实现

//模拟实现strcmp函数
int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 ==  * str){if ( *str1 == '\0'){return 0;}str1++;str2++;}return *str1 - *str2;
}
int main(void)
{//strcmp比较的是对应位置上的字符大小char ch1[10] = { 0 };char ch2[10] = { 0 };scanf("%s", ch1);scanf("%s", ch2);printf("%d\n", my_strcmp(ch1, ch2));
}

• 🌰3.2.模拟实现分析

💯分析:
1、因为这里是比较两个字符串,所以字符串都不需要修改,因为都可以用const 修饰
2、这里模拟实现的时候返回值是两个字符值的差值
3、也可以写为差值大于 0 返回 1 ;差值小于0返回 -1 形式。

在这里插入图片描述

• 🌙写在后面

友友们,相聚的时刻总是短暂的,又到了说再见的时候啦~ 🐳 但是字符串这一块经常在面试的时候会出模拟实现某某字符串函数的面试题,因此我们不能只会平时利用头文件直接调用而不去摸清原理哈~ 🐬要做到 摸清、拿捏、吃透 字符串函数。✨✨✨

在这里插入图片描述
代码不负有心人,98加满,向前冲啊🐬

🎉🎉🎉以上代码均可运行,所用编译环境为 vs2019 ,运行时注意加上编译头文件#define _CRT_SECURE_NO_WARNINGS 1


http://chatgpt.dhexx.cn/article/kJ5UBvq1.shtml

相关文章

比较函数大合集:strcmp,strncmp,memcmp

前言&#xff1a; 接着奏乐接着舞&#xff0c;我们继续来看字符串函数和内存函数。今天要讲的是比较函数大合集&#xff0c;话不多说&#xff0c;开肝&#xff01;&#xff01;&#xff01; strcmp函数&#xff1a; 什么是strcmp函数&#xff1f; strcmp即string compare&#…

Linux 字符串截取命令

Linux 字符串截取&#xff0c;一般用在 shell 脚本中&#xff0c;本篇写几个简单的 demo 跟大家分享一下 首先&#xff0c;定义一个变量 demohttps://blog.csdn.net/ 1.使用 # 号截取&#xff0c;删除左边字符&#xff0c;保留右边字符 echo ${demo#*//} 其中&#xff0c;demo…

bat字符串截取

举例&#xff1a;输入hello world和-2&#xff0c;输出ld 这个简单。代码如下 echo off&Setlocal enabledelayedexpansion :标签1 set 文本hello world set 开头-2 set 结尾 set /p 文本请输入文本&#xff0c;留空使用默认值hello world set /p 开头请输入取值开头位…

批处理字符串截取

批处理字符串截取 在批处理中&#xff0c;set的功能有点繁杂&#xff1a;设置变量、显示环境变量的名及值、做算术运算、等待用户的输入、字符串截取、替换字符串&#xff0c;是我们常用的命令之一。 在字符串截取方面&#xff0c;新手因为没能注意到偏移量的问题&#xff0c;…

整理了几种字符串截取方法

一、 (Substring);(Remove);(Replace) 1、取字符串的前i个字符 (1)string str1str.Substring(0,i);(2)string str1str.Remove(i,str.Length-i); 2、去掉字符串的前i个字符 string str1str.Remove(0,i);string str1str.SubString(i); 3、从右边开始取i个字符 string str1str.Sub…

JSTL标签的使用详情

if 标签 choose标签 forEach标签 这里是JSTL的标签文档&#xff0c;我们主要介绍几个常用的 https://www.runoob.com/jsp/jsp-jstl.html if 标签 if标签为判断标签&#xff0c;没有else标签&#xff0c;多个分支就用个if判断 例子 访问结果 choose标签 choose标签为选择标签…

JSTL标签库的使用及其常用标签

目录 什么是JSTL标签库&#xff1f; 使用JSTL标签库的步骤&#xff1a; 第一步&#xff1a;引入JSTL标签库对应的jar包。 第二步&#xff1a;在JSP中引入要使用标签库。&#xff08;使用taglib指令引入标签库。&#xff09; 第三步&#xff1a;在需要使用标签的位置使用即可。…

JSP之自定义jstl标签

目录 一&#xff0c;什么是JSP&#x1f351; 二&#xff0c;什么是JSTL&#xff08;JSTL标签库&#xff09;&#x1f353; 三&#xff0c;如何使用JSTL&#x1f345; 在项目中如何使用JSTL标签&#xff1f;在发开中使用JSTL标签库需要执行如下两个步骤。 &#xff08;1&a…

什么是JSTL标签?常用的标签库有哪些?

从JSP1.1规范开始&#xff0c;JSP就支持使用自定义标签&#xff0c;使用自定义标签大大降低了JSP页面的复杂度&#xff0c;同时增强了代码的重用性。为此&#xff0c;许多Web应用厂商都定制了自身应用的标签库&#xff0c;然而同一功能的标签由不同的Web应用厂商制定可能是不同…

jsp--JSTL标签库

目录 1.JSTL标签库介绍 2.JSTL 标签库的使用步骤 3.core核心库使用 3.1 <c:set> 3.2 <c:if /> 3.3 <c:choose> <c:when> <c:otherwise >标签 3.4 <c:forEach /> 1.JSTL标签库介绍 JSTL 标签库&#xff0c;全称是指 JSP Standard …

【Java Web】JSTL标签库的引入

在使用JSTL标签前首先要引入JSTL标签库 引入&#xff1a; <% taglib prefix"c" uri"http://java.sun.com/jsf/core" %> taglib是JSP指令&#xff0c;功能是用来引入标签库&#xff1b; prefix意思是前缀&#xff0c;指的就是使用标签时的前缀&a…

常见JSTL标签详解

JSP标准标签库&#xff08;JSTL&#xff09; jsp标准标签库&#xff08;jstl&#xff09;是一个JSP标签集合&#xff0c;它封装了jsp应用的通用核心功能。 JSTL支持通用的、格式化的任务。比如&#xff1a;迭代、条件判断、XML文档操作、国际化标签、SQL标签。除了这些它还提供…

JSTL标签库之核心标签

一、JSTL标签库介绍   JSTL标签库的使用是为弥补html标签的不足&#xff0c;规范自定义标签的使用而诞生的。使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二、JSTL标签库的分类 核心标签(用得最多)国际化标签(I18N格式化标签)数据库标签(SQL标签&#xff0c;很…

JSTL标签库的使用

1 JSTL 1.1 JSTL概述 1&#xff09;简介 JSTL的全称是&#xff1a;JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。 它由以下5个部分组成&#xff1a; 组成作用说明Core核心标签库。通用逻辑处理Fmt国际化有关。需要不同地域显示不同语言时使用Fun…

JSTL标签库 | 深入解析JSTL标签库

目录 一&#xff1a;深入解析JSTL标签库 1、什么是JSTL标签库 2、使用JSTL标签库的步骤 3、JSTL标签的原理 4、jstl中的核心标签库core当中常用的标签 一&#xff1a;深入解析JSTL标签库 1、什么是JSTL标签库 ①Java Standard Tag Lib&#xff08;Java标准的标签库&am…

JSTL标签库详细介绍

目录 一JSTL标签库 二、核心&#xff08;Core&#xff09;标签库 通用标签 循环控制标签 导入文件和URL 总结 一JSTL标签库 JSTL是一个不断完善的开放源代码的JSP标签库&#xff0c;是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上…

JSTL标签库

JSTL&#xff08;Java Server Pages Standerd Tag Library&#xff0c;JSP标准标签库&#xff09;包含用于编写和开发JSP页面的一组标准标签&#xff0c;它可以为用户提供一个无脚本环境。在此环境中&#xff0c;用户可以使用标签编写代码&#xff0c;而无须使用Java脚本。在JS…

JSTL标签

一、概念 JSTL的全称是JavaServer Pages Tag Library&#xff0c;我们也称之为JSP标准标签库。它是由Apache组织提供的开源的免费的jsp标签 二、作用 用于简化和替换jsp页面上的java代码 三、使用步骤&#xff1a; 导入jstl相关jar包引入标签库&#xff0c;通过<% tagl…

JSTL核心标签超详细

1.JSTL介绍 JSTL&#xff08;JavaServer Pages Standard Tag Library&#xff0c;JSP标准标签库)是一个JSP标签集合&#xff0c;它封装了JSP应用的通用核心功能。 JSTL支持通用的、结构化的任务&#xff0c;比如迭代&#xff0c;条件判断&#xff0c;XML文档操作&#xff0c;…

关于网站最近出现504错误的总结,too open many files in system

如果你有耐心看完这篇文章&#xff0c;也许会给你带来真正的益处。 网站出现504错误&#xff0c;如果你用阿里云CDN的话还会报 504 Gateway Time-out The gateway did not receive a timely response from the upstream server or application. Powered by Tengine 这样一句…