C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のケースを無視する独自のstrcmpを作成します


ここでは、2つの文字列を比較するが、文字列の文字の大文字小文字を無視するstrcmp(文字列比較)関数を作成する必要があります。この関数は、string1 string2の場合は1を返します。

問題を理解するために例を見てみましょう

入力

string1 = “Hello” , string2 = “hello”

出力

0

文字列の比較中に大文字と小文字を無視する独自のstrcmp関数を作成します。 i番目のインデックスの文字が同じである場合、つまりstring1 [i] ==string2 [i]の場合は、両方の文字列のすべての文字を繰り返し処理します。続行します。 string1 [i]> string2 [i]の場合、1を返します。string1[i]

ここでは、ケースを無視する必要があるため、Aとaは同じと見なされます。文字のASCII値を使用すると、a=97のASCIIはA=65のASCIIと等しくなります。

ソリューションの実装を示すプログラム

#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

  1. C++を使用して独自のsizeof演算子を実装する

    独自のsizeof()演算子を実装できるオプションがあります。演算子sizeof()は単項演算子であり、任意のタイプのデータのサイズを計算するために使用されます。 #defineディレクティブを使用して、sizeof()演算子とまったく同じように機能する独自のsizeof()演算子を実装できます。 独自のsizeof()演算子を実装するための構文は次のとおりです #define Any_name(object) (char *)(&object+1) - (char *)(&object) ここで Any_name −独自のsizeof()演算子に付ける名前。 これ

  2. C / C ++でのstrncmp()とstrcmp()の違い

    strncmp() 関数strncmp()は、左の文字列と右の文字列を数値まで比較するために使用されます。 strcmp()と同じように機能します。左の文字列の一致する文字が右の文字列の文字よりも大きいASCII値を持っている場合、ゼロより大きい値を返します。左の文字列の一致する文字のASCII値が右の文字列の文字よりも小さい場合、ゼロ未満の値を返します。 C言語でのstrncmp()の構文は次のとおりです。 int strncmp ( const char *leftString, const char *rightString, size_t number ); ここで le