编写一个可以在 C++ 中忽略大小写的 strcmp


我们需要编写的 strcmp(字符串比较)函数在比较两个字符串时应忽略大小写。若字符串1 < 字符串2,函数返回 -1;若字符串1 = 字符串2,函数返回 0;若字符串1 > 字符串2,函数返回 1。

让我们举个例子来理解这个问题:

输入

string1 = “Hello” , string2 = “hello”

输出

0

要编写我们的 strcmp 函数,需要在比较字符串时忽略大小写。我们要遍历两个字符串中的所有字符,如果这两个字符串中第 i 个索引处的字符相同,即 string1[i] == string2[i],则继续。如果 string1[i] > string2[i],则返回 1。如果 string1[i] < string2[i],则返回 -1。如果字符串结束了,则返回 0。

这里,我们需要忽略大小写,所以 A 和 a 将被视为相同。我们将使用字符的 ASCII 值,比如 a 的 ASCII 值 97 等于 A 的 ASCII 值 65。

程序来展示我们解决方案的实现:

示例

在线演示

#include <iostream>
using namespace std;
int strcmpFunc(string string1, string string2){
   int i;
   for (i = 0; string1[i] && string2[i]; ++i){
      if (string1[i] == string2[i] || (string1[i] ^ 32) == string2[i])
         continue;
      else
      break;
   }
   if (string1[i] == string2[i])
      return 0;
   if ((string1[i] | 32) < (string2[i] | 32))
      return -1;
   return 1;
}
int main(){
   cout<<"Compareing string using our strcmp function :\n";
   cout<<"Result: "<<strcmpFunc("HELLO", "hello")<<endl;
   cout<<"Result: "<<strcmpFunc("", "Hello")<<endl;
   cout<<"Result: "<<strcmpFunc("Tutorials", "Pint")<<endl;
   cout<<"Result: "<<strcmpFunc("afdadsa", "rewf")<<endl;
   cout<<"Result: "<<strcmpFunc("tutorialspoint", "TUTORIALSpoint")<<endl;
   return 0;
}

输出

Compareing string using our strcmp function −
Result: 0
Result: -1
Result: 1
Result: -1
Result: 0

更新时间:2020 年 4 月 17 日

704 次浏览

开启你的职业生涯

通过完成该课程获得认证

开始
广告