0

会社の従業員のアクセス カードに保存されている情報を自動的に読み取るシステムがあります。これらの情報は配列に格納されます。カードリーダーが機能しない場合、従業員は建物にアクセスするためにカードリーダーの近くのピンパッドに自分の名前とピンを入力する必要があり、カードリーダーはアレイに保存する情報を自動的に作成します。配列の最初の 3 番目のセルは常に正しい値で埋められ、残りのセルは 0 で埋められます。 3 番目の要素、これは維持する必要があります。

次のコードがあります。

    #include <iostream>  
    #include <string>      
    using namespace std;  
    int main(){  
      int const Taille=5;  
      int Track2[Taille], i;      
      Track2[0]=1;  
      Track2[1]=0;  
      Track2[2]=3;  
      Track2[3]=0;  
      Track2[4]=0;      
      cout<<"voici le contenu du tableau: \n";  
      for(i=0;i<Taille;i++){  
        if(Track2[i]!=0){  
        cout<<"Track2["<<i<<"]= "<<Track2[i]<<"\n";  
    }  
     }  
    return 0;  
    }  

これを実行すると、次の結果が得られます: voici le contenu du tableau: Track2[0]= 1 Track2[2]= 3そして、結果としてこれを取得したい: voici le contenu du tableau: Track2[0]= 1 Track2[ 1]= 0 Track2[2]= 3これは、配列の 3 番目の要素 (ここでは Track2[2]) の後の = 0 の値のみを配列から削除する必要があることを意味します。どうすればこれを行うことができますか? ありがとう

4

4 に答える 4

3

C++ を使用する場合は、std::vectorを使用します。メソッドがあるので、それを使用しますstd::vectorerase

#include <iostream>
#include <vector>




int main ()
{
  std::vector<int> myvector;

  // set some values (from 1 to 10)
  for (int i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}

sts::vector::eraseのドキュメント。

于 2012-12-05T10:38:03.480 に答える
1

あなたのプログラムは配列の一部を消去しません、それは単にそれの最後の部分を印刷するべきではありません(私があなたの質問を正しく読んでいるなら)。

そのために、最後に使用可能なインデックスを含む別の変数を保持し、代わりにそれに到達するまでループすることができます。

本当に配列からエントリを消去したい場合は、std::vector代わりに使用することをお勧めします。

于 2012-12-05T10:42:14.213 に答える
0

配列のサイズは固定されており(たとえば、5)、配列の作成時に決定されるため、配列から削除するのは簡単ではありません。

要素を削除する代わりに、同じ配列内の要素をコピーして、不要な要素を置き換えます。次に例を示します。

// Move element 2 to element 1, erasing the old element 1
Track[1] = Track[2];
Track[2] = 0;

別の解決策は、配列の代わりにstd::vectorを使用することです。Track2がベクトルの場合、vector::eraseメソッドを使用して要素を削除できます。

別の解決策は、要素をより小さな配列にコピーすることです。次に例を示します。

// New temporary smaller array
int Temp[2];
// Copy elements we want to keep
Temp[0] = Track2[0];
Temp[1] = Track2[2];
于 2012-12-05T10:40:51.160 に答える
0

配列から要素を削除する方法はありますが、最後にあるゼロの要素をすべて削除する関数は見つかりません。

これは自分で処理する必要があります。必要なのは、ゼロ以外の最後の要素までの配列の長さを見つけることです。これを行うことができますが、配列を逆方向にトラバースします。

int length;
for(length=Taille; i>=0; --length) {
   if (Track2[index] != 0) {
      break;
   }
}

length配列の長さがあり、これを配列を印刷する際の上限として使用できます

于 2012-12-05T10:45:10.127 に答える