整列済み配列から要素を検索するには関数 bsearch() を使う。 配列から要素を検索する関数を作る。 //********************************************************* // lsearch // 大きさ size の要素 num 個からなる配列 array から // 要素 key に一致する最初の要素へのポインタを返します。 // 要素 key に一致する要素がない場合には NULL が返ります。 // 要素の一致判定には、比較関数 comp が使われます。 //********************************************************* void * lsearch ( const void *key, const void *array, size_t num, size_t size, int (*comp)(const void *, const void *) ) { const char *stop = (const char *)array + ((num-1) * size); for( const char *p = (const char *)array; p <= stop; p = p + size ) { if ( 0 == comp( p, key ) ) return (void *)p; } return NULL; }//lsearch 使用例/* short 型変数値を昇順に順序づける比較関数 */ int comp_short( const void *vp, const void *vq ) { const short *p = (const short *)vp; const short *q = (const short *)vq; if ( *p < *q ) return -1; if ( *p > *q ) return 1; return 0; }//comp_short //********************************************************* // 関数 lsearch() の使用例です。 //********************************************************* int main( void ) { int i; short *p; short key; short array[10]; // 乱数配列作成 srand( time(NULL) ); for( i = 0; i < numof(array); i++ ) array[i] = (short)rand(); // 要素の検索 key = array[rand() % numof(array)]; p = (short *)lsearch( &key, array, numof(array), sizeof(short), comp_short ); // 検索結果表示 printf("要素 %d を検索\n", key ); for( i = 0; i < numof(array); i++ ) printf("%5d, ", array[i] ); printf( "\n%*s^^^^^\n", 7*(p-array), "" ); return 0; }//main 実行結果要素 24832 を検索 13411, 24624, 24811, 21124, 25038, 19778, 24832, 6673, 2401, 6831, ^^^^^ 関連
・配列の要素を逆順に並べ替える |
|
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
>> Amazon.co.jp 『たまゆら童子』 へ
>> 楽天ブックス 『たまゆら童子』 へ