我在C語言中有一個簡單的問題,所以我想檢查數組值是否存在於第二個數組(二維數組)中,不管數值的順序如何(隨機順序)檢查數組值是否在二維數組中
例如:
我要檢查在arr[3]={1,2,3}
的值,如果所有的人都在mat[3][3]={{1,5,3},{4,5,6},{4,2,5}};
在這種情況下存在,值存在這樣的程序會print ("OK");
注:我不t wan t計算兩次相同的值
我在C語言中有一個簡單的問題,所以我想檢查數組值是否存在於第二個數組(二維數組)中,不管數值的順序如何(隨機順序)檢查數組值是否在二維數組中
例如:
我要檢查在arr[3]={1,2,3}
的值,如果所有的人都在mat[3][3]={{1,5,3},{4,5,6},{4,2,5}};
在這種情況下存在,值存在這樣的程序會print ("OK");
注:我不t wan t計算兩次相同的值
我解決它,謝謝對所有我真的很感謝你的回答
#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");
只需遍歷頂層數組。對於其中的每個陣列,遍歷即並將每個元素與您要搜索的數組中的對應元素進行比較。如果他們都是平等的,則返回true。如果你到達外部for循環的結尾,返回false。
編輯:
澄清之後,好吧。如何創建一個名爲'result'的數組,其大小與您正在搜索的數組大小相等?將結果數組中的每個值初始化爲0,然後遍歷二維數組中的每個元素。如果元素與搜索詞中的其中一個元素匹配,請將結果數組中的對應值設置爲1.最後,檢查結果數組。如果它中的每個值都等於1,則返回true。否則,返回false。
「如果他們都是平等的」 - 但對於應該產生「OK」的示例值, D陣列不會發生。 –
對,就他給的例子來說,你會返回錯誤的。 –
所以這不可能是一個解決方案。 –
這裏有一個例子
#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;
}
首先它沒有幫助,爲什麼當你沒有檢查所有的值以及爲什麼j = 2? –
@YousufHardan'break'在那裏,因爲平等被違反,沒有理由檢查其他元素。 'j == 2',因爲數組被聲明爲3元素的數組,所以'2'是最後一個索引。如果我們之前沒有休息過,則通過所有元素的比較。它逐行檢查「a」行。它不會做任何交叉產品。那麼,爲什麼它沒有幫助? – Serge
它很容易通過只是在您尋找的期望值陣列進行迭代,並檢查是否退出再突破。檢查:
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;}
}
}
它的'c'不是'C++'。 –
我剛給他提示。希望OP會明白。 – unreleased
它仍然不完全有效。打印'okokNotFound'編輯:我在循環後面添加了'NotFound'打印。 –
只表 - 在內存中連續數據所需
返回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;
}
你有什麼試過的? –
爲(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} –
請在代碼*中發佈問題*。 –