2014-11-02 128 views
0

我刚学C++在很短的时间,并在分配 我试图找到一个2维数组中的特定目标如下:为什么这个搜索失败?

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'; 
    } 

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

谢谢!

+2

C/C++中的数组索引在0和n-1之间(不在1和n之间)。 – 2014-11-02 09:25:56

+2

为什么你用'0'和'1'作为'bool',为什么不用'false'和'true'? – 2014-11-02 09:27:01

+0

抱歉误导你们所有人,但n并不代表数组的大小,因此潜在的问题不是数字,而是感谢你所有的答案,我已经解决了这个问题! :) – hkbgner 2014-11-02 09:35:30

回答

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; 
} 

这应该工作。正确使用括号和条件

+0

为什么人们给-1?请说明原因! – rocker 2014-11-02 09:52:40

+0

我认为原因是代码看起来不好。 – 2014-11-02 10:01:37

+0

我刚刚在他的回答中编辑过,以便他能更好地理解他的错误。这不是我的编码风格! – rocker 2014-11-02 10:04:18

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; 
} 
0

有两件事情需要注意了: -

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

如果n表示大小这里(从通话似乎此功能),那么这需要改变。尺寸为10的数组必须从0索引到9

第二件事,而不是返回整数

return result; 

可以返回true或false。