为什么这种搜索失败了?

时间:2014-11-02 09:24:28

标签: c++

我刚刚学习C ++很短的时间,并且在作业中 我试图在二维数组中找到一个特定的目标,如下所示:

bool simsearch(int array[22][22], int target, int n){
    bool result = 0;
    for (int a = 1; a < n + 1; a++){
        for (int b = 1; b < n + 1; b++){
            if (array[a][b] == target)
                result = 1;
                break;
        }
    }
    return result;
}

并使用它:

if(simsearch(substitute, 6, size) == 0){
        cout << "**Warning**" << '\n';
    }

但是,即使目标位于数组中,警告输出也始终存在。 代码中的根本问题是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

数组索引从0开始,如果数组有n个元素,则最高索引为n-1。

按以下方式重写该功能

bool simsearch( const int array[22][22], int target, int n )
{
    bool found = false;

    for ( int i = 0; i < n && !found; i++ )
    {
        for ( int j = 0; j < n && !found; j++ )
        {
            if ( array[i][j] == target ) found = true;
        }
    }

    return found;
}

或者

bool simsearch( const int array[22][22], int target, int n )
{
    bool found = false;

    for ( int i = 0; i < n && !found; i++ )
    {
        int j = 0;

        while ( j < n && array[i][j] != target ) j++;

        found = j != n; 
    }

    return found;
}

我希望n的参数总是等于22。:)

另一种方法是以下

template <typename T, size_t M, size_t N>

bool simsearch( const T ( &a )[M][N], const T &value )
{
    bool found = false;

    for ( size_t i = 0; i < M && !found; i++ )
    {
        size_t j = 0;

        while ( j < N && !( a[i][j] == value ) ) ++j;

        found = j != N;
    }

    return found;
}

答案 1 :(得分:1)

bool simsearch(int array[22][22], int target, int n){
    bool result = 0;
    for (int a = 0; a < n ; a++){
        for (int b = 0; b < n; b++){
            if (array[a][b] == target){
                result = 1;
                break;
            }
        }
        if(result) break;
    }
    return result;
}

这应该有效。正确使用括号和条件

答案 2 :(得分:0)

这里有两点需要注意: -

for (int a = 1; a < n + 1; a++)

如果n表示此处的大小(通过调用此函数),那么您需要更改。大小为10的数组必须从0到9索引。

第二件事而不是返回整数

return result;

你可以返回true或false。