模拟实现库函数--strcmp(字符二进制比较)

简介: 模拟实现库函数--strcmp(字符二进制比较)

一.对库函数strcmp的了解



通过在MSDN或者cplusplus网站上检索strcpy

df795ac2e09d4ff8bd88f318ea1ff80b.png

通过对strcmp的检索,可以初步了解到strcmp以下信息:

1.比较的是字符串的大小

2.如果str1中得字符比str2中得字符大,返回一个>0得数字

3.如果str1中得字符比str2中得字符小,返回一个<0得数字

4.如果str1中得字符和str2中得字符内容一样,返回0

5.执行得是字符得二进制比较


二.模拟实现库函数strcmp



思路:

两个字符串中的内容从第一个字符开始逐一比较。

1.若比较的字符相同,则跳过该字符比较下一个字符

2.若不同则比较两字符串的大小后返回int 类型的一个数值

3.若两字符串始终相同,则直至遇到\0终止符后停止比较并返回值


#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
  assert(str1 && str2);
  //*str1++ == *str2++ 得情况下 会将下一次不符合得结果留再str1和str2中
  //*str1或者*str2再比较时遇到\0应直接终止比较
  while (*str1 == *str2 && *str1 != '\0' && *str2 != '\0')
  {
    str1++;
    str2++;
  }
  return *str1 - *str2;
}
int main()
{
  char arr1[] = "abcqr";
  char arr2[] = "abcq";
  int ret = my_strcmp(arr1, arr2);
  if (ret < 0)
    printf("str1<str2");
  else if (ret > 0)
    printf("str1>str2");
  else
    printf("str1=str2");
  return 0;
}


三.strcmp的比较形式



那么,两个字符串中的每一个字符是如何比较的呢?


由于比较的是两个字符串里的字符,字符以ASCII码值进行存储,ASCII码值本质是一个整数,而在内存中,无论是字符、字母、数字、符号等都是以二进制的形式存储的,因此strcmp比较的两个字符也是比较的存储在内存中二进制的大小。


对面上面这个代码

f95b1021039541ea8ecb99c4eb7347f0.png

由于字符r的二进制大小比\0的二进制大小大,因此arr1>arr2,返回一个大于0的数字


运行结果如下:

083dac8c4e4c44e1ad19aa3df591c175.png


相关文章
|
2月前
[字符串和内存函数]strcmp字符串函数的详解和模拟
[字符串和内存函数]strcmp字符串函数的详解和模拟
24 1
|
2月前
|
C语言
[字符串和内存函数]strcat字符串函数的详解和模拟
[字符串和内存函数]strcat字符串函数的详解和模拟
16 0
|
1月前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现2
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
5月前
|
存储 C语言
c语言获取终端输入字符串的函数scanf,gets,fgets
c语言获取终端输入字符串的函数scanf,gets,fgets
53 1
|
1月前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
2月前
|
PHP C++
[字符串和内存函数]strcpy和strlen字符串函数的详解和模拟
[字符串和内存函数]strcpy和strlen字符串函数的详解和模拟
32 0
|
5月前
模拟实现库函数strlen
模拟实现库函数strlen
15 0
|
7月前
|
C语言 C++
C/C++字符函数和字符串函数详解————内存函数详解与模拟
C/C++字符函数和字符串函数详解————内存函数详解与模拟
26 1
|
9月前
|
编译器 C语言
【C语言进阶】字符函数及字符串函数,带你掌握核心用法并模拟实现(1)——strlen,strcpy,strcmp
【C语言进阶】字符函数及字符串函数,带你掌握核心用法并模拟实现(1)——strlen,strcpy,strcmp
94 1
|
9月前
模拟实现库函数strstr--查找子字符串
模拟实现库函数strstr--查找子字符串