2017-08-11 146 views
-5

我在C语言中有一个简单的问题,所以我想检查数组值是否存在于第二个数组(二维数组)中,不管数值的顺序如何(随机顺序)检查数组值是否在二维数组中

例如:

我要检查在arr[3]={1,2,3}的值,如果所有的人都在mat[3][3]={{1,5,3},{4,5,6},{4,2,5}};

在这种情况下存在,值存在这样的程序会print ("OK");

注:我不t wan t计算两次相同的值

+2

你有什么试过的? –

+0

为(I = 0; I <3;我++) \t { \t \t对于(j = 0;Ĵ<3; J ++) \t \t { \t \t \t如果(垫[i] [j] == arr [i]) \t \t \t \t count ++; \t \t} \t} –

+2

请在代码*中发布问题*。 –

回答

-1

我解决它,谢谢对所有我真的很感谢你的回答

#define n 3 
    int *p = &vec[0]; 
int count1 = 0; 
for (i = 0; i < n; i++) 
{ 
    for (j = 0; j < n; j++) 
    { 
     if (*p <= vec[2]) 
     { 
      if (*p == mat[i][j]) 
      { 
       p++; 
       count1++; 
       i=0; 
       j=0; 
      } 
     } 
    } 
} 

if(count1 == 3) printf("ok"); 
+0

1)'i = 0; j = 0;':这不会使下一个搜索成为最高搜索。 2)'* p <= 3'可能会出现边界访问。 (另外,要搜索的数组的末尾不应该是一个固定的数字。) – BLUEPIXY

+0

我的朋友,首先我尝试了代码,它正在工作,第二次我让i = 0和j = 0来搜索第二个值再次像第一个值 –

+0

一样,这不会按预期工作。请参阅[DEMO](http://ideone.com/AJRJzL) – BLUEPIXY

0

只需遍历顶层数组。对于其中的每个阵列,遍历并将每个元素与您要搜索的数组中的对应元素进行比较。如果他们都是平等的,则返回true。如果你到达外部for循环的结尾,返回false。

编辑:

澄清之后,好吧。如何创建一个名为'result'的数组,其大小与您正在搜索的数组大小相等?将结果数组中的每个值初始化为0,然后遍历二维数组中的每个元素。如果元素与搜索词中的其中一个元素匹配,请将结果数组中的对应值设置为1.最后,检查结果数组。如果它中的每个值都等于1,则返回true。否则,返回false。

+0

“如果他们都是平等的” - 但对于应该产生“OK”的示例值, D阵列不会发生。 –

+0

对,就他给的例子来说,你会返回错误的。 –

+0

所以这不可能是一个解决方案。 –

0

这里有一个例子

#include <stdio.h> 

int main() { 
    int a[3] = {1,2,3}; 
    int b[3][3] = {{1,5,3},{4,5,6},{4,2,5}}; 
    int i, j; 

    for (i = 0; i < 3; i++) { 
     for (j = 0; j < 3; j++) { 
      if (a[j] != b[i][j]) break; 
      if (j == 2) { 
       printf("exists in row %d\n", i); 
       return 1; 
      } 
     } 
    } 
    printf("does not exists\n"); 
    return 0; 
} 
+0

首先它没有帮助,为什么当你没有检查所有的值以及为什么j = 2? –

+0

@YousufHardan'break'在那里,因为平等被违反,没有理由检查其他元素。 'j == 2',因为数组被声明为3元素的数组,所以'2'是最后一个索引。如果我们之前没有休息过,则通过所有元素的比较。它逐行检查“a”行。它不会做任何交叉产品。那么,为什么它没有帮助? – Serge

-1

它很容易通过只是在您寻找的期望值阵列进行迭代,并检查是否退出再突破。检查:

for(int a=0; a<3; a++) 
{ 
    int cnt=0; 
    for(int b=0;b<3; b++) 
    { 
     if(mat[a][b]==arr[b])cnt++; 
     if(cnt==3){cout<<"ok"; return 0;} 
    } 
} 
+3

它的'c'不是'C++'。 –

+0

我刚给他提示。希望OP会明白。 – unreleased

+0

它仍然不完全有效。打印'okokNotFound'编辑:我在循环后面添加了'NotFound'打印。 –

0

只表 - 在内存中连续数据所需

返回0,如果有没有发现,1,如果找到的所有

int FindVectorInMatrix(int *haystack, int rows, int columns, int *needle, int length) // as described by OP order does not matter 
{ 
    int *tmp; 
    int result = 0; 
    for (int i = 0; i < length; i++) 
    { 
     tmp = haystack; 
     if (result < i) 
     { 
      result = 0; 
      break; 
     } 
     for (int j = 0; j < rows * columns; j++) 
     { 
      if (*tmp++ == *needle) 
      { 
       result++; 
       break; 
      } 
     } 
     needle++; 
    } 
    return !!result; 
}