lsearch
stdlib.h:インデックス への移動
ヘッダーファイル
stdlib.h
カテゴリ
メモリと文字列の操作ルーチン
プロトタイプ
void *lsearch(const void *key, void *base, size_t *num, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));
説明
線形検索を実行します。
lsearch は,テーブルから情報を検索します。線形検索なので,lsearch を呼び出す前にテーブルエントリを整列する必要はありません。key が指す項目がテーブルにない場合,lsearch は,その項目をテーブルに追加します。
- base は,検索テーブルのベース(0 番めの要素)へのポインタです。
- num は,テーブル内のエントリ数を表す整数へのポインタです。
- width は,各エントリのバイト数を保持します。
- key は,検索する項目(検索キー)へのポインタです。
関数 fcmp では,_USERENTRY 呼び出し規約を使用する必要があります。
引数 fcmp は,ユーザーが記述した比較ルーチンへのポインタです。このルーチンは,2 つの項目を比較し,その結果に基づいて値を返します。
テーブルを検索するために,lsearch は,fcmp でアドレスが渡されたルーチンを繰り返し呼び出します。
比較ルーチンを呼び出すたびに,lsearch は次の 2 つの引数を渡します。
key |
検索する項目へのポインタ |
elem |
比較される base の要素へのポインタ |
fcmp は,検索キーとテーブルエントリを任意の方法で解釈できます。
戻り値
lsearch は,検索キーに一致するテーブル内の最初のエントリのアドレスを返します。
検索キーと *elem が異なる場合,fcmp は,0 以外の整数を返します。検索キーと *elem が同じ場合,fcmp は,0 を返します。
例
#include <stdlib.h>
#include <stdio.h>
#include <string.h> /* strcmp の宣言用 */
/* 色の数を初期化します */
char *colors[10] = { "Red", "Blue", "Green" };
int ncolors = 3;
int colorscmp(char **arg1, char **arg2)
{
return(strcmp(*arg1, *arg2));
}
int addelem(char **key)
{
int oldn = ncolors;
lsearch(key, colors, (size_t *)&ncolors, sizeof(char *),
(int(*)(const void *,const void *))colorscmp);
return(ncolors == oldn);
}
int main(void)
{
int i;
char *key = "Purple";
if (addelem(&key))
printf("%s already in colors table\n", key);
else
{
printf("%s added to colors table\n", key);
}
printf("The colors:\n");
for (i = 0; i < ncolors; i++)
printf("%s\n", colors[i]);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |