【c语言】字符串比较 | API仿真

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ


c语言系列专栏:c语言之路重点知识整合

字符串知识点:字符串基本概念、存储原理


字符串比较 目录

  • 一、字符串比较
  • 二、strncmp仿真
    • 声明:
    • 指针方式定义:
    • 调用测试:
    • 运行结果:

一、字符串比较

字符串比较是对两个或多个字符串进行逐个字符的比较判断是否相等

strcmp() 函数根据两个字符串的第一个不同字符的 ASCII 码对比大小

返回 1 代表 大于关系 ; 返回 0代表等于关系;返回-1代表小于关系

标准库函数strncmp:

image-20230506151200574

使用:

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
	/*字符串比较函数*/ 
	
	/*strcmp*/
	 printf("%d\n", strcmp("ABCDE", "a"));//str2的ASCII码大于str1就输出-1
	 printf("%d\n",strcmp("ABCDE","ABCDE"));//str2的ASCII码等于str1就输出0
	 printf("%d\n", strcmp("ABCDe","ABCDE"));//str2的ASCII码小于str1就输出1
     
	return 0;
}

image-20230506151341144


二、strncmp仿真

字符串常用于文字处理,常用且实用。因此其常用功能被封装成了一套API。可通过string.h进行使用。

通过仿真我们可以理解其函数内部工作机制的细节

定义一个my_strncmp函数,模仿strncmp函数比较字符串

不使用标准函数strncmp比较,使用自己定义的my_strncmp函数

声明:

int my_strcmp(const char* str1, const char* str2);

指针方式定义:

 int my_strcmp(const char* str1, const char* str2)
 {
	 const char* p1 = str1;
	 const char* p2 = str2;
	 while (*p1 == *p2 && *p1)
	 {
		 p1++;
		 p2++;
	 }
	 //return *p1 - *p2; 
	 return *p1 - *p2 ? (*p1 - *p2) / abs(*p1 - *p2) : 0;
 }

调用测试:

#include <stdio.h>
#include <string.h>
#include <math.h>
int my_strcmp(const char* str1, const char* str2);
int main()
{
	/*字符串比较函数*/ 
	
	/*strcmp*/
	 //printf("%d\n", strcmp("ABCDE", "a"));//-1
	 //printf("%d\n",strcmp("ABCDE","ABCDE"));//0
	 //printf("%d\n", strcmp("ABCDe","ABCDE"));//1
	/*仿真字符串比较函数 strcmp */
	 printf("%d\n", my_strcmp("ABCDE", "a"));//-1
	 printf("%d\n", my_strcmp("ABCDE", "ABCDE"));//0
	 printf("%d\n", my_strcmp("ABCDe", "ABCDE"));//1

	return 0;
}
/*仿真字符串比较函数 strcmp */
 int my_strcmp(const char* str1, const char* str2)
 {
	 const char* p1 = str1;
	 const char* p2 = str2;
	 while (*p1 == *p2 && *p1)
	 {
		 p1++;
		 p2++;
	 }
	 //return *p1 - *p2; 
	 return *p1 - *p2 ? (*p1 - *p2) / abs(*p1 - *p2) : 0;
 }

运行结果:

与原先的strncmp函数比较效果相同:

image-20230506151702008

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Snipaste介绍、安装、使用技巧(截图贴图工具)

一、简介 Snipaste 是一个简单但强大的截图贴图工具&#xff0c;也可以让你将截图贴回到屏幕上&#xff01;下载并打开 Snipaste&#xff0c;按下 F1 来开始截图&#xff0c;再按 F3&#xff0c;截图就在桌面置顶显示了。就这么简单&#xff01; 你还可以将剪贴板里的文字…

学习分享|一文搞懂WiFi 6/7 以及选择路由器改造网络那些事

目录 什么是 WiFi 6 WiFi 6 功能特点 WIFI 6 与前几代对比 速度更快 延时更低 容量更大 更安全 更省电 WiFi 4~WiFi 6对比 WiFi 6 核心技术 WiFi 7 WiFi 世代列表 路由器常用技术扩展 2.5Ge 网口 WAN/LAN口复用/网口盲插 双WAN口 双LAN口端口聚合 mesh组网 聊…

思维导图手撕MyBatis源码

文章目录 前置准备通过类加载器读取配置文件流创建sqlSessionFactory建造者模式的使用 打开SqlSession获取Mapper接口对象执行Mapper接口方法 前置准备 既然要读MyBatis的源码&#xff0c;那么我们就要先弄清楚MyBatis的入口在哪。这里我们直接写一个标准的MyBatis使用程序&am…

6.1.1 图:基本概念

一&#xff0c;基本概念 1.基本定义 &#xff08;1&#xff09;图的定义 顶点集不可以是空集&#xff0c;但边集可以是空集。 &#xff08;2&#xff09; 有向图的表示&#xff1a; 圆括号 无向图的表示&#xff1a; 尖括号 简单图、多重图&#xff1a; 简单图&#xff1a;…

基于 SpringBoot+WebSocket 无DB实现在线聊天室

0 项目说明 0.1 样例展示 0.2 源码地址 GitHub&#xff1a;https://github.com/ShiJieCloud/web-chat Gitee&#xff1a;https://gitee.com/suitbaby/web-chat GitCode&#xff1a;I’m Jie / web-chat GitCode 1 WebSocket 简介 1.1 HTTP 常用的 HTTP 协议是一种无状态…

刚进公司就负责项目,把老弟整蒙了!

刚进公司就负责项目&#xff0c;把老弟整蒙了&#xff01; 大家好&#xff0c;我是鱼皮&#xff0c;先把封面图送给大家&#xff1a; 又快到周末了&#xff0c;今天分享一些轻松的编程经验~ 还记得我学编程的老弟小阿巴么&#xff1f;他目前大二&#xff0c;听说最近刚刚找到…

Redis超详细入门手册教程!还不快来看看?

地址&#xff1a; RedisRedis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures …https://redis.io/ 1&#xff1a;NoSQL简介 1.1&#xff1a;数据库应用的演变历程 单…

线程的原子性、可见性、有序性及线程安全知识整理

要想保证线程安全&#xff0c;必须同时满足原子性、可见性、有序性。 一、定义 1.1 原子性 一个操作或者多个操作&#xff0c;要么全部执行&#xff0c;并且执行的过程不会被打断&#xff0c; 要么就全部不执行&#xff08;一个操作是不可被分割的&#xff09;。 Java中实现…

ApiPost简单使用

目录 环境与变量 设置与使用 随机参数变量 内置Mock字段随机参数 自定义随机参数 全局参数 使用手册 apipost可支持一键压测和自动化接口测试 环境与变量 设置与使用 设置 环境变量可设置环境名称、变量名称、变量初始值、URL&#xff1a; 可以在请求变量或者接口 URL…

攻防世界-web-simple js

题目描述&#xff1a;小宁发现了一个网页&#xff0c;但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 打开链接&#xff1a; 然后我们会发现不管我们输入什么密码&#xff0c;发现是都是这样的报错 1. 先用bp抓包看看&#xff0c;可以抓到这样的一串js脚本 看不懂…

matlab实现BP神经网络(完整DEMO)

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、BP神经网络Demo代码 1.1 代码整体思路 1.2 BP神经网络Demo代码 二、运行结果 2.1 拟合曲线 2.2训练误差与预测误差 三、相关文章 3.1-BP的入门学习目录&#xff1a;老饼…

JavaScript经典教程(七)-- JavaScript初级

190&#xff1a;JavaScript初级内容 - DOM查询、插入内容、赋予样式等 1、DOM操作 DOM&#xff1a;节点&#xff0c;也就是html中的元素&#xff1b; DOM操作&#xff1a;其实就是节点元素的方法&#xff1b; &#xff08;1&#xff09;innerHTML - 返回元素内容 同时也可以…

关于maven

一、maven是什么 一个java项目构建工具 二、maven的作用 &#xff08;1&#xff09;依赖管理 不同框架整合&#xff0c;互相依赖jar包版本不同&#xff0c;版本不一样&#xff0c;程序跑起来就会报错。用maven管理jar包。 &#xff08;2&#xff09;跨平台构建项目 linux服…

数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)

目录 最大堆的建立 方法1 方法2 思路图解 代码实现 代码解释 PercDown BuildHeap 最大堆的建立 建立最大堆&#xff1a;将已经存在的N个元素按最大堆的要求存放在一个一维数组中。 方法1 通过插入操作&#xff0c;将N个元素一个一个地插入到一个初始为空的堆中去。…

简述对象检测与图像分类与关键点检测区别

计算机视觉是人工智能的一个多元化领域&#xff0c;旨在检测和识别图像或视频的内容。大多数开始计算机视觉领域之旅的人的常见问题之一是&#xff1a;目标检测、图像分类和关键点检测之间有什么区别&#xff1f; 让我们先看看 什么是对象检测 对象检测是一种计算机视觉和图像…

excel中英文互译

在excel运行宏时弹出下面的提示&#xff1a; 无法运行“XXXXX”宏。可能是因为该宏在此工作薄中不可用&#xff0c;或者所有的宏都被禁用的错误提示 解决办法&#xff1a; 1、点击“文件”选项卡&#xff1b; 2、在选项卡界面窗口中选择“选项”按钮&#xff1b; 3、在“选项…

JavaScript实现在键盘输入按键,浏览器进行显示的代码

以下为实现在键盘输入按键&#xff0c;浏览器进行显示的代码和运行截图 目录 前言 一、在键盘输入按键&#xff0c;浏览器进行显示 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xf…

智能汽车实验二(视觉传感器标定)

实验二 视觉传感器标定&#xff08;实验报告&#xff09; 【实验目的】 1、了解开源图像处理库OpenCV的结构&#xff0c;掌握OpenCV的基本使用方法。 2、了解开源图像处理库OpenCV的基本模块功能&#xff0c;掌握常用图像处理方法。 3、掌握摄像机标定算法&#xff0c;学会使用…

igraph的layout布局

做图论的社区检测&#xff0c;需要画图显示&#xff0c;用igraph可以进行可视化。 igraph有几个布局&#xff0c;分别如下&#xff1a; layout_with_dh &#xff1a; The Davidson-Harel layout algorithm Place vertices of a graph on the plane, according to the simulat…

113-Linux_安装c/c++开发库及连接mysql数据库

文章目录 一.安装c/c开发库二.连接mysql数据库三.用户的管理与授权 mysql数据库的安装 一.安装c/c开发库 安装开发c/c的库&#xff0c;命令&#xff1a;apt install libmysqlclient-dev 二.连接mysql数据库 #include<stdio.h> #include<mysql/mysql.h>void fun…