多くの文字列を比較する必要があるプログラムがある場合、実行時間を最小限に抑えるための最良の方法は何ですか?
2 に答える
strcmp()
- 2 つの文字列を比較します。
const char *s1, *s2;
比較する文字列です。
int i;
i = strcmp( s1, s2 );
比較の結果を示します。i
文字列が同一の場合はゼロです。stringが string より大きいi
場合は正であり、 string が stringより大きい場合は負です。「より大きい」と「より小さい」の比較は、ASCII 照合シーケンスに従って行われます。s1
s2
s2
s1
strcmp()
s1
string と stringを比較しますs2
。両方の文字列は、通常の ' 文字で終了する必要があります\0'
。
strncmp()
const char *s1, *s2;
比較する文字列です。
size_t N;
調べる文字数を指定します。
int i;
i = strncmp( s1, s2, N );
比較の結果を示します。文字列の最初の文字が同一のi
場合はゼロです。文字列 "s1" が string より大きい場合は正であり、文字列 "s2" が string より大きい場合は負です。「より大きい」と「より小さい」の比較は、ASCII 照合シーケンスに従って行われます。N
i
s2
s1
strncmp()
string の最初の N 文字を strings1
の最初の文字と比較しN
ますs2
。文字列の 1 つまたは両方が文字よりも短い場合N
(つまりstrncmp()
、' に遭遇した場合\0'
)、比較はその時点で停止します。したがってN
、正確な数ではなく、検査される文字の最大数を表します。N
(ゼロの場合、常にゼロを返すことに注意してくださいstrncmp()
。文字はチェックされないため、違いは検出されません。)
memcmp()
const void *s1, *s2;
比較する文字列です。size_t N;
調べる文字数を指定します。
int i;
i = memcmp( s1, s2, N );
比較の結果を示します。文字列の最初の文字が同一のi
場合はゼロです。文字列 "s1" が string より大きい場合は正であり、stringが string より大きい場合は負です。「より大きい」と「より小さい」の比較は、ASCII 照合シーケンスに従って行われます。N
i
s2
s2
s1
memcmp()
N
文字列 "s1" の最初の文字を文字列 の最初の N 文字と比較しますs2
。
strncmp()
関数とは異なり、どちらの文字列の終端もmemcmp()
チェックしません。'\0'
したがってN
、文字列が実際にはそれほど長くなくても、完全な文字を調べます。
wmemcmp()
int wmemcmp(const wchar_t *a1, const wchar_t *a2, size_t size);
この関数wmemcmp()
は、a1 で始まるサイズ ワイド文字と a2 で始まるサイズ ワイド文字を比較します。返される値は、最初の異なるワイド文字 a1 が a2 の対応する文字よりも小さいか大きいかに応じて、0 より小さいか大きいかになります。
2 つのブロックの内容が等しい場合は、wmemcmp()
0 を返します。
任意の配列では、このmemcmp()
関数は主に等価性のテストに役立ちます。通常、バイト以外の配列でバイト単位の順序比較を行うことは意味がありません。たとえば、浮動小数点数を構成するバイトをバイトごとに比較しても、浮動小数点数の値間の関係については何もわかりません。
wcscmp()
int wcscmp(const wchar_t *ws1, const wchar_t *ws2);
wcscmp 関数は、ワイド文字列 ws1 と ws2 を比較します。返される値は、最初の異なるワイド文字 ws1 が ws2 の対応する文字よりも小さいか大きいかに応じて、0 より小さいか大きいかになります。
2 つの文字列が等しい場合は、wcscmp()
0 を返します。
によって使用される順序付けの結果、wcscmp()
ws1 が の最初の部分文字列である場合ws2
、ws1 は ws2 より「小さい」と見なされます。
wcscmp()
文字列が記述される言語のソート規則を考慮しません。それを取得するには、を使用する必要がありますwcscoll
。
wcscasecmp()
int wcscasecmp(const wchar_t *ws1, const wchar_T *ws2)
この関数は に似wcscmp()
ていますが、大文字と小文字の違いは無視されます。大文字と小文字の関係は、現在選択されているロケールによって決まります。標準の "C" ロケールでは、文字 Ä と ä は一致しませんが、これらの文字をアルファベットの一部とみなすロケールでは一致します。
strcmpi()
int strcmpi(const char *string1, const char *string2);
strcmpi()
比較string1
し、大文字とstring2
小文字を区別しません。2 つの引数 string1 および string2 のすべての英字は、比較の前に小文字に変換されます。
この関数は、ヌルで終わる文字列を操作します。'\0'
関数の文字列引数には、文字列の末尾を示すnull 文字が含まれている必要があります。
strcmpi()
次のように、2 つの文字列間の関係を示す値を返します 。
0string1
未満 未満string2
0string1
は string2 に相当
0string1
より大きい より大きいstring2
。
strcasecmp()
int strcasecmp(const char *s1, const char *s2);
この関数は に似strcmp()
ていますが、大文字と小文字の違いは無視されます。大文字と小文字の関係は、現在選択されているロケールによって決まります。標準の "C" ロケールでは、文字 Ä と ä は一致しませんが、これらの文字をアルファベットの一部とみなすロケールでは一致します。
strncasecmp()
int strncasecmp(const char *s1, const char *s2, size_t n);
この関数は に似strncmp()
ていますが、大文字と小文字の違いは無視されます。のようstrcasecmp()
に、大文字と小文字の関係はロケールに依存します。
どのアプローチが最適かは、要件によって異なります。
使用できますstrcmp( string1,string2);
文字列の配列の場合:strcmp(string1[i], string2[j]);
数値が返されます:
- 0 の場合、それらは同じです。
- 0 より大きい場合、文字列 1 はアルファベット順で 2 番目よりも大きくなります。
- 0 より小さい場合、文字列 1 はアルファベット順で 2 番目よりも小さくなります。