0

我有一个问题,如下所述:我有一个数组(比如说)a[]={10,24,56,33,22,11,21} 我有这样的东西

for(i=0;i<100;i++){
    if(a[i]==10)
        // do something
}

接下来当 i=1

if(a[i]==10 && a[i+1]==24)

依此类推,因此在每次迭代中, if 中的参数/条件现在应该有所不同,这将是一个非常大的序列,我无法明确编写
if(a[i]==10 && a[i+1]==24 && a[i+2]==56 ...... a[i+100]=2322)

我怎样才能达到这种不同的条件?

4

5 回答 5

1

在循环中有一个循环:

for (i = 0; i != 100; ++i)
{
    int condition = 1;
    for (j = 0; i + j != 100 && condition; ++j)
    {
        condition = condition && (a[i + j] == /* your number */ );
    }
    if (condition) { /* ... */ }
}
于 2012-05-12T11:38:38.853 回答
1

我认为你应该引入一个布尔值。

bool valid = true;

for(i=0;i<100;i++){
    if(a[i]==10 && valid)
        // do something
    else
    {
        valid = false;
        break;
    }
}

对于每次迭代,您需要更改要比较的值a[i]

于 2012-05-12T11:39:46.980 回答
1

您必须有一个累积的“布尔”变量,在第 i 次迭代时检查 a[i] 并更新该变量:

int a[] = {...};   /* array with some values to verify */
int v[] = {...};   /* these are the actual desired values in a[] */

/* the verifying loop */
int i;
int cond = 1;
for (i = 0; i < 100; i++)
{
    cond = cond && (a[i] == v[i]);
    if (cond)
    {
       /* do something */
    }
}
于 2012-05-12T12:32:41.547 回答
0

在这种情况下,您可以使用函数指针或块。你可以在这里找到一个很好的例子

于 2012-05-12T11:41:07.837 回答
0

看到你的例子,我认为你正在谈论的变化只是数组'a'的长度,你想在某个数组x中检查它的存在。如果确实如此,那么 memcmp 可能对您有用。

让我稍微修改一下您的示例以澄清我在说什么。

int a[7]={10,24,56,33,22,11,21} 是您要在某个数组“x”中检查的必需值,每次使用不同长度的“a”,使用“x”声明为

int x[1000];

在这种情况下,您可以使用 memcmp 如下:-

for ( len = 1 ; len <= 7 ; ++len )
{ for ( i = 0 ; i <= 1000-len ; ++i )
  { if ( ! memcmp( a, x+i, len * sizeof(int) ) )
    { // do something
    }
  }
}
于 2012-05-12T12:07:44.860 回答