2017-08-11 90 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; 
}