Mystrcmp与指针的特点

/******************************************************************************************************
 * @file name:		  :Mystrcmp
 * @brief  		      :模拟strcmp
 * @author 		      :wvjnuhhail@126.com
 * @date 			  :2024/06/24
 * @version 1.0 	  :V1.0
 * @property 		  :暂无
 * @note   		      :None
 * CopyRight (c)  2023-2024   wvjnuhhail@126.com   All Right Reseverd
 ******************************************************************************************************/

#include <stdio.h>
#define STR_LEN 50

int Strcmp(char *s1, char *s2);
int Strcmp(char *s1, char *s2) // 注意如果s1和s2不相同则返回第一个不同的字符差  s2-s1
{
  while (1)
  {
    if (*s1 != *s2) // 只能判断相不相等
    {
      return *s2 - *s1; // 返回不同的字符差
    }

    s1++; // adfwa
    s2++; // adfwa

    if (*s1 == '\0' || *s2 == '\0') // 判断是否到了字符串的末尾
    {
      break;
    }
  }

  return *s2 - *s1; // 这行代码是上面的循环 循环到了字符串的末尾
}

int My_Strcmp_While(char *str_1, char *str_2)
{
  // abc
  // abcd
  while (*str_1 != '\0' && *str_2 != '\0')
  {
    /* if(*(str_1++) != *(str_2++))
     {
         return *(str_1-1) - *(str_2-1); //
     }*/
    int reslut = *(str_1++) - *(str_2++);
    if (reslut != 0)
    {
      return reslut;
    }
  }

  // 第一次while的小括号里面判断 f 和 f
  // 第一次进入while循环判断的是  f 和 f
  // 第二次while小括号里面判断的是 s 和 g
  // 第二次进入while循环判断的是  s 和 g

  return *str_1 - *str_2;
  //   0  -   a
}

int My_Strcmp(char *str_1, char *str_2)
{
  for (; *(str_1) != '\0' && *(str_2) != '\0'; str_1++, str_2++)
  {
    if (*str_1 != *str_2)
    {
      return *str_1 - *str_2;
    }
  }

  return *str_1 - *str_2;
}

int main()
{
  // 定义两个数组,存放字符串,后面封装一个函数用来比较他们相不相同

  char s1[STR_LEN] = "fdajsfgjdswavfdas";
  char s2[STR_LEN] = "fdajsfgjdswa";

  int ret = Strcmp(s1, s2);
  if (ret == 0)
  {
    printf("s1等于s2\n");
  }
  else if (ret > 0)
  {
    printf("s2 > s1+++%d\n", ret);
  }
  else
  {
    printf("s2 < s1+++%d\n", ret);
  }

  return 0;
}

image

posted @ 2024-06-24 20:13  WJnuHhail  阅读(3)  评论(0编辑  收藏  举报