📜  编写自己的忽略大小写的strcmp(1)

📅  最后修改于: 2023-12-03 15:11:42.251000             🧑  作者: Mango

编写自己的忽略大小写的strcmp

在 C 语言中,strcmp 函数用于比较两个字符串是否相等。但是 strcmp 函数是区分大小写的,这就意味着两个看似相同的字符串,但是大小写不同的情况下,strcmp 函数会认为这两个字符串不相等。

但是有很多场景下需要忽略字符串的大小写,比如用户的输入。此时我们需要一个忽略大小写的字符串比较函数,本文就来介绍一下如何编写自己的忽略大小写的 strcmp 函数。

思路

忽略大小写的字符串比较函数的实现思路,可以分为以下几个步骤:

  1. 初始化两个指向字符串开头的指针。
  2. 遍历两个字符串,如果当前字符相同,则指针分别后移;如果当前字符不同,则判断这两个字符是否相差大小写,如果相差大小写,则继续比较下一个字符;如果不相差大小写,则说明两个字符串不相等,返回 -1 或 1,或者其他你自己定义的返回值。
  3. 如果两个字符串完全相同,则返回 0。
代码实现

下面是一个简单的代码实现,该函数返回值与 strcmp 函数相同,即:

  • 如果两个字符串相等,则返回 0;
  • 如果 s1 大于 s2,则返回大于 0 的值;
  • 如果 s1 小于 s2,则返回小于 0 的值。
#include <ctype.h>
#include <stdio.h>

int strcasecmp(const char *s1, const char *s2) {
  while (*s1 && *s2) {
    if (tolower(*s1) != tolower(*s2)) {
      return (tolower(*s1) < tolower(*s2)) ? -1 : 1;
    }
    ++s1;
    ++s2;
  }

  return (*s1 == *s2) ? 0 : ((*s1 < *s2) ? -1 : 1);
}

这里使用了 tolower() 函数将字符转换为小写字母进行比较。如果两个字符相差大小写,则函数返回 -1 或 1,如果两个字符串完全相同,则返回 0。

使用

使用该函数非常简单,只需要将需要比较的两个字符串作为参数传递给函数即可,如下所示:

#include <stdio.h>

int main() {
  char str1[] = "Hello, World!";
  char str2[] = "hElLo, wORld!";

  int result = strcasecmp(str1, str2);

  if (result == 0) {
    printf("The strings are equal.\n");
  } else if (result < 0) {
    printf("String 1 is less than string 2.\n");
  } else if (result > 0) {
    printf("String 1 is greater than string 2.\n");
  }

  return 0;
}
总结

编写一个忽略大小写的字符串比较函数,不仅能提高程序的用户体验,更能避免一些不必要的错误。本文简单介绍了一下该函数的实现思路和代码实现,希望对大家有所帮助。