Cプログラミングで2つの文字列を比較するためにstrcmpで使用されたアルゴリズムを説明できる人はいますか?
この戻り値を理解できませんでした。「Levenstienアルゴリズム」のようなアルゴリズムを使用して、2つの文字列間の距離を見つけます...
Cプログラミングで2つの文字列を比較するためにstrcmpで使用されたアルゴリズムを説明できる人はいますか?
この戻り値を理解できませんでした。「Levenstienアルゴリズム」のようなアルゴリズムを使用して、2つの文字列間の距離を見つけます...
標準CライブラリであるglibcのGNU実装はオープンソースであり、興味があればstrcmp.cを読むことができます。それほど多くはありません。ここにあります:
/* Compare S1 and S2, returning less than, equal to or
greater than zero if S1 is lexicographically less than,
equal to or greater than S2. */
int strcmp (const char *p1, const char *p2)
{
register const unsigned char *s1 = (const unsigned char *) p1;
register const unsigned char *s2 = (const unsigned char *) p2;
unsigned reg_char c1, c2;
do
{
c1 = (unsigned char) *s1++;
c2 = (unsigned char) *s2++;
if (c1 == '\0')
return c1 - c2;
}
while (c1 == c2);
return c1 - c2;
}
strcmp
文字列距離アルゴリズムではありません。これは文字列比較アルゴリズムであり、2 つの文字列が等しい (リターン コード ゼロ) か、そうでない場合は、2 つの文字列のどちらがその単語の何らかの意味で「大きい」か (正のまたは負の値)。
返される結果の大きさは指定されていません。つまり、常に 1、0、または -1 を返すことができます。または、距離の測定値 (たとえば、レーベンシュタイン、単純な減算など) の実際の積分距離を返すこともできます。実際にstrcmp
は、パフォーマンス上の理由から、実際の文字列距離アルゴリズムを使用して実装されることはありません (2 つの文字列の等価性を判断するために最小限の作業を行って、終了します)。