详解字符串比较函数:strcmp函数及其模拟实现

简介: 详解字符串比较函数:strcmp函数及其模拟实现

对于字符串比较函数:strcmp函数,想必大家也不会感觉陌生,毕竟在之前就有过接触!虽然很少使用,但是,见面了也能认出来!只不过不太怎么使用过罢了!!


话不多说,笔者下面进入正题,来带领大家回归今日的主题!


strcmp是字符串的比较函数,该比较多不是字符串的长度,而是比较的对应位置的ASCII码值的大小!


使用方法为:


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

对于返回类型为int ,或许不少老铁有着……疑问??为什么返回值会是int(整型)呢??


str1 < str2 : 返回一个小于0的数字:-1


str1 > str2  :返回一个大于0的数字: 1


str1 = str2  :返回0


对于上述不认同的读者,可以参考一下,笔者的代码:


#include <stdio.h>
#include <string.h>
int main()
{
  char arr1[] = "abcdef";
  char arr2[] = "abq";
  int ret = strcmp(arr1, arr2);
  printf("%d\n", ret);
  return 0;
}

因为在ASCII码中’c'对应的值小于'q'所对应的值,所以打印的结果为-1


代码的运行结果为:


0a2653c851af460fa595bd959398a8f1.png


但是当arr1[],arr2[]更改数值以后,代码的运行结果也会随之发生改变,所以……嗯!所以返回值为:-1,1,0;没啥大问题!!


#include <stdio.h>
#include <string.h>
int main()
{
  char arr1[] = "abcdef";
  char arr2[] = "abq";
  char arr3[] = "abcd";
  char arr4[] = "abc";
  char arr5[] = "abc";
  char arr6[] = "abc";
  int ret = strcmp(arr1, arr2);
  if (ret > 0)
  {
  printf("arr1>arr2\n");
  }
  else if (ret < 0)
  {
  printf("arr1<arr2\n");
  }
  else
  {
  printf("arr1=arr2\n");
  }
  return 0;
}


但是,对于:arr1[]={'a','b','c'},与arr2[]={'a','b','c'};该如何进行比较??


原因在于:'\0'的位置未知,不知道该怎么……嗯,因此,这就需要我们注意细节!!


下面来对strcmp函数来进行模拟实现!!请各位老铁仔细欣赏!!


#include <stdio.h>
#include <string.h>
#include <assert.h>
int my_strcmp(const char* s1, const char* s2)
{
  assert(s1 && s2);
  while (*s1 == *s2)
  {
  if (s1 == '\0')
  {
    return 0;
  }
  s1++;
  s2++;
  }
  if (*s1 > *s2)
  {
  return 1;
  }
  else
  {
  return -1;
  }
}
int main()
{
  char arr1[] = "abcdef";
  char arr2[] = "abq";
  int ret = my_strcmp(arr1, arr2);
  if (ret > 0)
  {
  printf("arr1>arr2\n");
  }
  else if (ret < 0)
  {
  printf("arr1<arr2\n");
  }
  else
  {
  printf("arr1==arr2\n");
  }
  return 0;
}


对于该段代码的解析,毕竟没有什么很多的重要内容,想必各位老铁也都能看懂,缺少的仅仅是思路而已,笔者在此就不做更多的讲解!!


代码的运行结果为:


2d65d23f6d4748949b924e4057485923.png


本篇博客主要内容到此结束!!


相关文章
|
7月前
[字符串和内存函数]strcmp字符串函数的详解和模拟
[字符串和内存函数]strcmp字符串函数的详解和模拟
60 1
|
7月前
|
C语言
[字符串和内存函数]strcat字符串函数的详解和模拟
[字符串和内存函数]strcat字符串函数的详解和模拟
56 0
|
7月前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现2
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
C语言
strlen函数【详解+模拟实现】
strlen函数【详解+模拟实现】
|
2月前
|
存储 C语言 数据格式
解析spritf和sscanf与模拟常用字符串函数strchr,strtok(二)
解析spritf和sscanf与模拟常用字符串函数strchr,strtok(二)
27 0
|
7月前
|
C语言
C语言:字符函数和字符串函数(strlen strcat strcmp strncmp等函数和模拟实现)
C语言:字符函数和字符串函数(strlen strcat strcmp strncmp等函数和模拟实现)
|
7月前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
strstr函数的使用及模拟实现
1.strstr函数 2.strstr函数的使用 3.strstr函数的模拟实现
176 0
|
7月前
|
PHP C++
[字符串和内存函数]strcpy和strlen字符串函数的详解和模拟
[字符串和内存函数]strcpy和strlen字符串函数的详解和模拟
74 0
strlen函数的两种模拟方法以及使用
strlen函数的两种模拟方法以及使用