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

あなたの例を見ると、あなたが話しているバリエーションは、配列xの存在をチェックしたい配列'a'の長さだけにあると思います。確かにそうであれば、memcmpはあなたに役立つ可能性があります。

私が言っていることを明確にするために、あなたの例を少し修正しましょう。

int a [7] = {10,24,56,33,22,11,21}は、毎回異なる長さの「a」、「x」の配列「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 に答える