我刚刚学习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';
}
但是,即使目标位于数组中,警告输出也始终存在。 代码中的根本问题是什么?
谢谢!
答案 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。