我在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} –
请在代码*中发布问题*。 –