首页 > 其他分享 >【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现

【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现

时间:2024-03-31 17:59:10浏览次数:20  
标签:return s1 处理函数 char 字符串 C语言 strcmp 指针

目录

 一、strcmp函数介绍

函数原型

函数参数

功能描述

返回值

使用示例

二、strcmp函数模拟实现

思路

代码

测试


         个人主页:    倔强的石头的博客

        系列专栏 C语言指南         C语言刷题系列  

系列文章

【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现-CSDN博客

【C语言基础篇】字符串处理函数(二)strcpy的介绍及模拟实现-CSDN博客

【C语言基础篇】字符串处理函数(三)strcat的介绍及模拟实现-CSDN博客

 一、strcmp函数介绍

strcmp() 函数是 C 语言标准库中用于比较两个字符串的一个重要函数,全称为 "string compare"。它位于 <string.h> 头文件

函数原型

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

函数参数

  • const char *str1:指向第一个要比较的字符串的指针。
  • const char *str2:指向第二个要比较的字符串的指针。

功能描述

strcmp() 函数逐字符地比较两个字符串 str1 和 str2,直到找到它们之间存在差异的字符,或者到达任一字符串的结束符 \0比较基于每个字符的 ASCII 值(对于宽字符字符串,对应的是宽字符集的排序规则)。 

返回值

  • 如果 str1 和 str2 完全相同(包括结尾的 \0 字符),则返回 0 表示两者相等。
  • 如果 str1 在字典顺序(ASCII值顺序)上小于 str2,则返回一个小于 0 的整数值。
  • 如果 str1 在字典顺序上大于 str2,则返回一个大于 0 的整数值。

使用示例

注意:逐个ASCII对比,即使数组2字符个数大于数组1,通过比较ASCII也会得出数组1大于数组2

 

二、strcmp函数模拟实现

思路

1.        进入函数先对两个指针进行断言,防止对野指针进行操作

2.        while循环,条件是指针1指向的内容与指针2指向的内容相等(相同),这时指针1和指针2都向后移动 ,直到指针1或者指针2走到了'\0',说明两个指针指向的内容完全相同,return 0(因为循环进入的条件是指针1和指针2相等,这表示指针1和指针2同时指向了'\0')

3.        如果代码段没有从while循环走到return语句,在其之后返回一个当前两个指针指向内容ASCII做差的值,这也正巧妙地满足了该函数的返回值要求

 

代码

#include<stdio.h>
#include<string.h>
#include<assert.h>
int strcmp1(const char* s1,const char* s2)
{
	assert(s1 != NULL && s2 != NULL);
	while (*s1 == *s2)
	{
		if (*s1 == '\0')
			return 0;
		s1++;
		s2++;
	}
	/*if (*s1 > *s2)
		return 1;
	else
		return -1;*/
	return *s1 - *s2;//优化后,直接返回当前两个指针指向内容ASCII做差的值
}
int main()
{
	char arr1[] = { "abcdef" };
	char arr2[] = { "abqef" };
	printf("%d\n", strcmp(arr1, arr2));
	printf("%d\n", strcmp1(arr1, arr2));
	return 0;
}

测试

标签:return,s1,处理函数,char,字符串,C语言,strcmp,指针
From: https://blog.csdn.net/2302_78391795/article/details/137026659

相关文章

  • C语言——初出茅庐
               一、初识C语言                   1.C语言的起源                   2.C语言的基本结构                   3.C语言的特......
  • #include<初见C语言之指针(5)>
    目录一、sizeof和strlen的对比1. sizeof2.strlen二、数组和指针题解析1.⼀维数组1.1数组名理解2.字符数组 3. ⼆维数组三、指针运算题解析总结一、sizeof和strlen的对比1. sizeof我们前面介绍过sizeof是单目操作符sizeof括号中有表达式,不计算 计算变......
  • C语言----预处理(详解)
         好了书接上回。我在讲编译与链接的时候写过宏和条件建议。我说会在下一篇博客中讲解,那么来了。今天我们来详细的讲讲预处理。宏与条件编译也在其中,那么我们现在就来好好会会这个预处理吧。预定义符号    关于预定义符号,我暂时只知道几个。并且我知道的......
  • C语言----简单讲解编译与链接
        大家好,这次我们来讲讲我们写下代码后,源代码是变为执行文件的,这里我们将会使用用另外一种编译器(gcc),但是嘞因为鄙人对电脑的理解还是比较少的,所以对于我们进行对比的编译器(gcc)鄙人只能提供代码,以及一些网络上其他博主的图文,希望大家理解这样更加方便大家了解。(如果大......
  • C语言 06 无符号数
    所有的数据底层都是采用二进制来进行保存的。第一位用于保存符号位。如果不考虑这个符号位,那么所有的数都是按照正数来表示。比如考虑了符号位的char类型:考虑符号表示范围:-128~127不考虑符号:0~255直接使用这些不带符号位的数据类型:#include<stdio.h>intmain()......
  • C语言 05 变量与常量
    变量变量就像在数学中学习的x,y一样,可以直接声明一个变量,并利用这些变量进行基本的运算,声明变量的格式为:数据类型变量名称=初始值;(其中初始值可以不用在定义变量时设定)=是赋值操作,可以将等号后面的值赋值给前面的变量,等号后面可以直接写一个数字(常量)、变量名称、算式。比......
  • 初识C语言——函数
            哈喽呀,各位小伙伴,本肉段er~又来给大家送知识啦!不禁感慨一下,这两周的溜肉段er还是比较勤奋滴呢,嘻嘻嘻!    这一次,肉段er将为各位小伙伴们介绍一下C语言中的函数,包括函数是什么、函数的分类、函数的参数以及函数的声明和定义。请各位小伙伴跟随肉段e......
  • C语言02-常量、二进制、数据类型
    第4章常量1.常量特点程序运行时,其值不能改变的量,即为常量。2.常量分类字面量常量标识符常量3.常量定义方式(标识符常量)①#define宏定义②const关键字(C99标准增加)4.两种定义方式区别类型检查:const编译阶段会进行类型检查,#define方式不......
  • 数据结构-C语言描述(队列的链表实现)
    概述在日常生活中,先进先出似乎更加符合我们的日常认知。 排队的人群中,队首的人总是先离开,而队尾的人总是后离开。1.队列的基本原理和操作我们知道队列也是一种线性表,而今天我们就用非顺序储存结构(链表)来实现它。首先我们先明确队列的基本操作原理:因为同时涉及到队首和队......
  • 初始C语言
    自我简绍:本人双非院校大一新生,集成电路设计与集成系统专业。我认为C语言是学习其他语言的基础,可以为以后学其他语言打好基础,很有必要好好学习学习,并且网上有很多项目都是开源的,可以很好的去实际。未来编程目标:首先将C语言系统的仔细学一下,然后再学学数据结构与算法。我想......