表示: Delphi
C++
表示設定
lsearch
提供:RAD Studio XE2
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++ |
|---|---|---|---|
|
+ |