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

C ++文字列==とcompare()の違いは?


C ++では、compare()関数と==演算子を使用して2つの文字列を比較できます。次に、問題は、なぜ2つの異なる方法があるのか​​ということです。違いはありますか?

compare()と==演算子の間にはいくつかの基本的な違いがあります。 C ++では、両方の文字列が同じかどうかを確認するために、文字列に対して==演算子がオーバーロードされます。それらが同じである場合、これは1を返し、そうでない場合は0を返します。したがって、ブール型関数のようなものです。

compare()関数は、2つの異なるものを返します。両方が等しい場合は0を返し、文字sとtに不一致が見つかった場合は、sがtより小さい場合は-1を返し、そうでない場合はsがtより大きい場合は+1を返します。 ASCIIコードを使用して一致をチェックします。

上記の議論のアイデアを得るために例を見てみましょう。

サンプルコード

#include <iostream>
using namespace std;

int main() {
   string str1 = "Hello";
   string str2 = "Help";
   string str3 = "Hello";

   cout << "Comparing str1 and str2 using ==, Res: " << (str1 == str2) << endl;//0 for no match
   cout << "Comparing str1 and str3 using ==, Res: " << (str1 == str3) << endl;//1 for no match

   cout << "Comparing str1 and str2 using compare(), Res: " << str1.compare(str2) << endl;//checking smaller and greater
   cout << "Comparing str1 and str3 using compare(), Res: " << str1.compare(str3) << endl;//0 for no match
}

出力

Comparing str1 and str2 using ==, Res: 0
Comparing str1 and str3 using ==, Res: 1
Comparing str1 and str2 using compare(), Res: -1
Comparing str1 and str3 using compare(), Res: 0
>
  1. C#でのStringとStringBuilderの違い

    C#の文字列 文字列はC#で不変です。つまり、作成後に文字列を変更することはできません。操作を実行すると、メモリ内に文字列型の新しいオブジェクトが作成されます。 string str1 = Welcome!; // creates a new string instance str1 += Hello; str1 += World”; を作成します C#のStringBuilder StringBuilderはC#で変更可能です。これは、文字列に対して操作が実行された場合、毎回新しいインスタンスが作成されるわけではないことを意味します。これにより、文字列とは異なり、メモリ内に新しいス

  2. StringとStringBufferの違い

    文字列は不変のクラスであり、そのオブジェクトは作成後に変更できませんが、他のオブジェクトを確実に参照します。複数のスレッドはオブジェクトの状態を変更できないため、不変のオブジェクトはスレッドセーフであるため、マルチスレッド環境で非常に役立ちます。 文字列バッファは、文字列の反転、文字列の連結などの文字列オブジェクトの操作を行うために使用できる可変クラスです。文字列の新しいオブジェクトを作成せずに文字列を変更できます。文字列バッファもスレッドセーフです。 また、string concat +演算子は、内部でStringBufferまたはStringBuilderクラスを使用します。違いは次の