StringCompare関数の働き・役割
StringCompare関数は、2つの文字列を比較し、その比較結果を整数値で返します。
この関数を使用することで、文字列の大小関係や等価性(同じものかどうか)を調べることができます。
文字列の大小関係や等価性の比較方法
文字列の比較は、アルファベット順に一文字ずつ行われます。各文字は、対応するASCIIまたはUnicodeのコード値に基づいて比較されます。
※Unicodeについての詳細は↓の記事をご参照ください
この比較は以下のように行われます:
- 最初の文字を比較します。
- 最初の文字が同じであれば、次の文字を比較します。
- 一つの文字がもう一方の文字よりも小さい(例えば’A’ < ‘B’)場合、その文字列全体も小さいと見なされます。
- 全ての文字が同じであれば、文字列全体が等しいと見なされます。
日本語の場合はどうなるの?
日本語の文字列を比較する場合も、基本的な原理は同じです。
文字列の各文字はUnicode値に基づいて比較されます。例えば、「あ」と「い」を比較すると、「あ」のUnicode値が「い」よりも小さいため、「あ」は「い」よりも小さいと判断されます。日本語の文字列比較でも、大文字小文字の区別が必要な場合がありますが、日本語では通常ひらがな、カタカナ、漢字の違いが比較対象となります。
StringCompare関数の引数について
int StringCompare(
const string& string1, // 比較対象の最初の文字列
const string& string2, // 比較対象の二つ目の文字列
bool case_sensitive=true // 大文字と小文字を区別するかどうか
);
StringCompare関数は以下の引数を取ります:
string1
:比較対象の最初の文字列。string2
:比較対象の二つ目の文字列。case_sensitive
:大文字と小文字を区別するかどうかを指定するbool型の値。
この値がtrueの場合、大文字と小文字が区別されます。falseの場合、区別されません。デフォルト値はtrueです。
StringCompare関数の戻り値について
StringCompare関数の戻り値は以下の通りです:
- -1:
string1
がstring2
より小さい場合。 - 0:
string1
がstring2
と等しい場合。 - 1:
string1
がstring2
より大きい場合。
StringCompare関数を使う際の注意点
- 文字列の比較はアルファベット順に行われ、現在のコードページに従います。
コードページとは、文字セットの特定のエンコーディング(文字をデジタルデータとして表現する方法)を指し、例えば、UTF-8やShift_JISなどがあります。
つまり、文字列の各文字がアルファベット順(またはUnicode順)で一文字ずつ比較され、その順序は使用しているシステムのコードページ(文字エンコーディング)に基づきます。
例えば、英語のアルファベットの場合、’A’から’Z’までの順序で比較されます。また、比較する文字の順序はASCIIコードまたはUnicodeに基づきます。
日本語の場合も同様に、文字はUnicode順に基づいて比較されます。これにより、ひらがな、カタカナ、漢字の間で正しい順序が保たれます。例えば、「あ」は「い」よりもUnicode値が小さいため、”あいう”は”かきく”より小さいと判断されます。 - 大文字と小文字を区別するかどうかは、
case_sensitive
パラメータで制御できます。デフォルトでは、大文字と小文字が区別されます。
StringCompare関数を使ったサンプルコード
以下は、StringCompare関数を使って文字列を比較するサンプルコードです。
// スクリプトの実行開始時に自動的に呼び出されるOnStart関数
void OnStart()
{
// 比較対象の文字列を定義
string s1 = "Apple";
string s2 = "home";
// 大文字小文字を区別して比較
int result1 = StringCompare(s1, s2);
if(result1 > 0)
PrintFormat("大文字小文字を区別した比較: %s > %s", s1, s2);
else if(result1 < 0)
PrintFormat("大文字小文字を区別した比較: %s < %s", s1, s2);
else
PrintFormat("大文字小文字を区別した比較: %s = %s", s1, s2);
// 大文字小文字を区別せずに比較
int result2 = StringCompare(s1, s2, false);
if(result2 > 0)
PrintFormat("大文字小文字を区別しない比較: %s > %s", s1, s2);
else if(result2 < 0)
PrintFormat("大文字小文字を区別しない比較: %s < %s", s1, s2);
else
PrintFormat("大文字小文字を区別しない比較: %s = %s", s1, s2);
// 日本語の比較
string s3 = "あいう";
string s4 = "かきく";
// 日本語文字列の比較
int result3 = StringCompare(s3, s4);
if(result3 > 0)
PrintFormat("日本語の比較: %s > %s", s3, s4);
else if(result3 < 0)
PrintFormat("日本語の比較: %s < %s", s3, s4);
else
PrintFormat("日本語の比較: %s = %s", s3, s4);
}
サンプルコードに使われた関数や文法要素の簡単な解説
- OnStart関数:スクリプトが開始されたときに自動的に実行される関数。
- string型:文字列を表すデータ型。
- PrintFormat関数:指定されたフォーマットに従って文字列を出力する関数。
- StringCompare関数:2つの文字列を比較する関数。
このサンプルコードでは、”Apple”と”home”、および日本語の”あいう”と”かきく”という2つの文字列を比較しています。
まず、大文字と小文字を区別して比較し、その結果をエキスパートログに出力します。
次に、大文字と小文字を区別せずに比較し、その結果もエキスパートログに出力します。また、日本語の文字列も比較し、その結果をエキスパートログに出力します
<参照>
StringAdd関数/StringBufferLen関数/StringLen関数/StringConcatenate関数/StringFill関数/StringInit関数/StringFind関数/StringGetCharacter関数/StringSetLength関数/StringReplace関数/StringReserve関数/StringSetCharacter関数/StringSplit関数/StringSubstr関数/StringToLower関数/StringToUpper関数/StringTrimLeft関数/StringTrimRight関数
コメント