C语言-strcmp(对比函数模拟和使用)

strcmp(对比函数模拟和使用)

strcmp的语法

 字符串的比较目的

这里比如你写一个网站,对照自己的用户和密码进行对比

使用(对比)方式

strcmp(arr1,arr2)

常量

arr1这里是常量 数组名是个地址所以是拷贝

所以不能这样对比

而是

常量字符串这里是把首字符给p 也就是首字符的地址给p

对比方式

如果要比较两个字符串的内容

比较逻辑 一一对应的比较

四种情况 这里比较的是内容

使用逻辑

上面的小于 返回值是-1

这里比较的对应ASCII码值的大小 遇见不一样的直接跳出循环 遇见一样但继续 一个一个进行对比 对比完进行下一个

返回数值逻辑 vs这里是-1 1 0 进行判断的 不一定一定是-1 1

 使用的代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
int main()
{
	char arr1[] = "sadaasd";
	char arr2[] = "sadaasd";
	char arr3[] = "sadasd ";
	char arr4[] = "sadasde";
		int ret1 = strcmp(arr1, arr2);//这里需要说明一下 是一个一个对应 什么意思呢就是 ss 对照  aa dd aa。。。所以返回0
	int ret2 = strcmp(arr1, arr3);//ss aa dd aa as这里是a的ASCII码值比s小 所以返回-1 此时不进行下面的循环
	int ret3 = strcmp(arr4, arr3);
	//这里的逻辑对比是一一对比,如果 前面的字符大 此时也就返回1 小的情况下 也就返回-1 相等的情况下 也就是整个字符串相等 返回0 
	printf("%d\n%d\n%d\n\n", ret1, ret2, ret3);
	printf("%d\n%d\n%d\n\n", ret1, ret2, ret3);
}

 

 代码讲解

`strcmp` 是一个在 C 语言中常用的字符串比较函数,它的作用是比较两个字符串的内容是否相同。`strcmp` 函数的定义通常在 `<string.h>` 头文件中,其原型如下:

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

`strcmp` 函数按照 ASCII 码的值逐个字符比较两个字符串。它的比较方式如下:
1. 从第一个字符开始比较,如果两个字符串的对应字符的 ASCII 码值相同,则继续比较下一个字符。
2. 如果两个字符串的对应字符的 ASCII 码值不同,`strcmp` 函数返回两个 ASCII 码值之间的差值的符号位,即如果第一个不同字符的 ASCII 码值在字符串1中大于字符串2中的对应字符,则返回正值;如果小于,则返回负值;如果相等,则继续比较下一个字符。
3. 如果在某个字符上比较结果不同,则函数停止比较并返回结果,不会等到字符串结束。
4. 如果两个字符串完全相同,`strcmp` 函数返回 `0`。
这里有一些例子来说明 `strcmp` 的比较方式:



// 比较 "hello" 和 "hello"
strcmp("hello", "hello") → 返回 0
// 比较 "hello" 和 "world"
strcmp("hello", "world") → 返回负值
// 比较 "hello" 和 "Hello" (注意大小写)
strcmp("hello", "Hello") → 返回负值
// 比较 "hello" 和 "hell" (较短的字符串)
strcmp("hello", "hell") → 返回正值

需要注意的是,`strcmp` 函数对比较的字符串大小写敏感。如果你需要进行不区分大小写的比较,可以使用 `strcasecmp` 函数(在 `<string.h>` 中定义)或者在 `strcmp` 函数中自己转换字符到小写或大写进行比较。
在使用 `strcmp` 函数时,应该注意比较的两个字符串都是以 `\0`(空字符)结尾的,因为如果两个字符串前缀相同,只有比较到字符串末尾或者发现一个字符不同时,`strcmp` 才会返回不同的结果。 

模拟实现(版本1)

这里加上const进行限制 防止进行修改

函数实现的逻辑 等于就继续 不等于就直接返回

在相等逻辑里面 进行判断 也就是同时遇见最后一个字符0 跳出循环

模拟实现(版本2)

不给予准确数值 返回就可以

模拟实现代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
//这里采取的是两个模拟函数 也就是两个版本
int MY_strcmp(char* arr1, char* arr2)
{
	while (*arr1 == *arr2)这里代码循环的条件就是只要相等就继续++ 然后遇见最后一个字符'\0'自然会跳出循环
	{
		if (*arr1 == '\0')//遇见'\0'说明已经遇到最后一个字符了 也就可以跳出循环
			return 0;
		*arr1++; *arr2++;
	}
	return *arr1 - *arr2;//其他情况下 直接可以返回指针的差值不一定是非得是1 =1 0 这样的数值 因为每个编译器的返回数值是不一样的  我这里是vs的编译器
}
int my_strcmp(char* arr1, char* arr2)
{
	while (*arr1 == *arr2)//这里不能while(*arr1++==*arr2++)因为 这里是先++后等于 也就是 第一个元素和第二个元素的对比 所以不能这样的
	{
		if (*arr1 == '\0')//遇见'\0'说明已经遇到最后一个字符了 也就可以跳出循环
		{
			return 0;
		}
		*arr1++;//这里相等就继续++
		*arr2++;//同理
	}
	if (*arr1 > *arr2)//这里是按照*arr1也就是元素的ASCII码值进行对比的  如果大于 就返回1 小于就返回-1 不需要判断0 因为相等会继续循环
	{
		return 1;
	}
	else
	{
		return -1;
	}
}
int main()
{
	char arr1[] = "sadaasd";
	char arr2[] = "sadaasd";
	char arr3[] = "sadasd ";
	char arr4[] = "sadasde";
	int ret1 = strcmp(arr1, arr2);//这里需要说明一下 是一个一个对应 什么意思呢就是 ss 对照  aa dd aa。。。所以返回0
	int ret2 = strcmp(arr1, arr3);//ss aa dd aa as这里是a的ASCII码值比s小 所以返回-1 此时不进行下面的循环
	int ret3 = strcmp(arr4, arr3);
	//这里的逻辑对比是一一对比,如果 前面的字符大 此时也就返回1 小的情况下 也就返回-1 相等的情况下 也就是整个字符串相等 返回0 
	printf("%d\n%d\n%d\n\n", ret1, ret2, ret3);

	int ret4 = my_strcmp(arr1, arr2);
	int ret5 = my_strcmp(arr1, arr3);
	int ret6 = my_strcmp(arr4, arr3);
	printf("%d\n%d\n%d\n\n", ret4, ret5, ret6);
    //这里大家可以自己看看
	int ret7 = MY_strcmp(arr1, arr2);
	int ret8 = MY_strcmp(arr1, arr3);
	int ret9 = MY_strcmp(arr4, arr3);
	printf("%d\n%d\n%d", ret7, ret8, ret9);

}

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于MySQL+Vue.js开发集成实时聊天系统的动态项目管理web端软件源码+答辩PPT+使用说明.zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 基于MySQL+Vue.js开发集成实时聊天系统的动态项目管理web端软件源码+答辩PPT+使用说明.zip 部署前端服务 1. 打包前端文件生成 dist 文件夹 ```js // genal-chat-client npm i npm run build ``` 1. 将 dist 下所有文件放到 nginx 下的 html 文件夹中 2. 配置 nginx 的 gzip (提高传输速度)和请求级别(注意只是新增下面的代码,不是替换整个nginx文件) ```js 记得重启一下nginx #### 数据库配置 1. 安装 mysql 2. 设置 mysql 账号密码 3. 创建名为 `chat` 的数据库 4. 配置后端 `app.module.ts` 中的 mysql 账号密码 部署后端服务 1. 安装 pm2 ```js // genal-chat-server npm i pm2 -g ``` 2. 生成 dist 文件 ```js // genal-chat-server npm i npm run build ``` 3. 使用 pm2 运行 ```js // genal-chat-server npm run pm2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值