C の線形検索から複数の検索を出力するにはどうすればよいですか?
for (i=0; i < index; i++)
if (array[i] == target)
return i;
たとえば、配列にターゲットと等しい複数の要素がある場合、複数の値を返すことは可能ですか?
C の線形検索から複数の検索を出力するにはどうすればよいですか?
for (i=0; i < index; i++)
if (array[i] == target)
return i;
たとえば、配列にターゲットと等しい複数の要素がある場合、複数の値を返すことは可能ですか?
関数内で動的配列を割り当てるという問題が発生する可能性がありますが、それはおそらく呼び出し元に管理を任せたほうがよいでしょう。
関数を次のように変更します。
int findVal (int *array, int size, int val) {
for (int i = 0; i < size; i++)
if (array[i] == val)
return i;
return -1;
}
開始点を指定できるもの (または、より正確には、開始点よりも 1 つ少ないもの):
int findVal (int *array, int size, int last, int val) {
for (int i = last + 1; i < size; i++)
if (array[i] == val)
return i;
return -1;
}
次に、クライアントに次のように呼び出しさせます。
int index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), -1, myval);
while (index != -1) {
// Do something with index.
index = findVal (myarray, sizeof(myarray)/sizeof(*myarray), index, myval);
}
クライアントがそれを配列に入れたい場合は、配列に入れることができます。しかし、彼らが一時的なことをしたいだけなら (単にインデックスを印刷してそれを忘れるなど)、そのために配列を無駄にするのはほとんど意味がありません。
一致する要素を返す代わりに、インデックス値を出力する (複数の値を出力できるようにする) か、それらを配列に挿入して返すことができます。