-1

次の関数は、線形検索を実行することになっています。

int linsearch(T arr[],int size,T target)
{
    int begin;
    int loc;
    bool found;
    for(begin=0;begin<size&&target!=arr[begin];begin++);
    loc = begin;
    if(target==arr[loc])
        found = loc;
    else
        found = -1;
    return found;
}

ただし、何を検索しても、常に1出力として得られます。これは、要素が配列の内外にある場合に発生します。助けてください。

4

1 に答える 1

0
bool found;
:
return found;

ブール値は通常、true/false に制限され、多くの場合 1/0 として表されます。ゼロ以外の値を a に配置するboolと、強制的に になる可能性が高くなり1ます。

見つかった場所のインデックスを返したい場合は、おそらく次を使用する必要がありますint

int found;

ただし、その変更を行っても機能しません。

int linsearch(T arr[],int size,T target)
{
    int begin;
    int loc;
    int found;  // <<-- changed this
    for(begin=0;begin<size&&target!=arr[begin];begin++);
    loc = begin;
    if(target==arr[loc])
        found = loc;
    else
        found = -1;
    return found;
}

これは、アイテムが見つからない場合begin(およびlocに設定したためbegin) がそのまま残されるsizeため、 を使用して配列の末尾を超えてチェックしているためですarr[loc]

ループの直後に、次のようなものを使用して、その状態を適切に確認する必要があります (loc不要なので完全に削除します)。

if (begin == size)
    found = -1;
else
    found = begin;

いずれにせよ、コードはおそらく大幅に冗長ではなくなります。

int linsearch (T arr[], int size, T target)
{
    int loc;
    for (loc = 0; loc < size; loc++)
        if (target == arr[loc])
            return loc;
    return -1;
}
于 2013-09-18T08:40:59.610 に答える