2012-12-05 69 views
0

我有一個系統可以自動讀取存儲在公司員工訪問卡上的信息。這些信息存儲在一個數組中。當讀卡器不起作用時,僱員必須在讀卡器附近的pinpad上輸入他的名字和Pin以訪問該建築物,並且讀卡器將自動創建存儲在該陣列中的信息。數組的第三個第一個單元格總是用正確的值填充,其餘的單元格用0填充。我的工作是訪問此數組並刪除第三個元素之後的所有不相關的零,即使它在第三個因素,這個必須保持。如何使用C++刪除數組中的某些值

我有以下代碼:

#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樂contenu杜畫面:磁軌2 [0] = 1磁軌2 [2] = 3我想得到這個結果:voici le contenu du tableau:Track2 [0] = 1 Track2 [1] = 0 Track2 [2] = 3這意味着,只有值= 0,在我的數組的tird元素之後(這裏是Track2 [2])必須從我的數組中刪除。 我該怎麼做? 謝謝

+0

也許把音軌[0],[追蹤[爲上限1]和跟蹤[2]到另一個數組像int Track3 [2]? – Pavenhimself

回答

3

如果您使用C++,請使用std::vectorstd::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文檔。

+0

@丹尼斯感謝您的幫助。我嘗試使用一個矢量,並使用** Track2.erase(Track2.begin()+ 3,Track2.end())**將您的代碼調整到我的練習,並且它給了我預期的結果。 –

0

從數組中刪除並不容易,因爲數組具有固定大小(例如5),這是在創建數組時確定的。

不用刪除元素,元素複製下來在同一陣列中,以取代你不想要的元素,例如:

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

另一種解決方案是使用一個std ::矢量,而不是一個數組。如果Track2是一個向量,那麼您可以使用vector :: erase方法刪除一個元素。

另一個解決方案是元素複製到一個較小的陣列,例如:

// New temporary smaller array 
int Temp[2]; 
// Copy elements we want to keep 
Temp[0] = Track2[0]; 
Temp[1] = Track2[2]; 
+0

好的。我感謝使用臨時變量,但它會很長時間,當我的數組內容30個單元格,我想例如只保留20個第一。我想,我會試着用矢量。 –

+1

@FrankyN。使用一個向量而不是一個數組會更習慣C++ ...使用一個數組是一種老式的風格,而不是C++。如果您必須使用數組,則可以分階段進行:1)計算要保留的元素數量2)創建較小的數組3)複製元素。因爲較小的數字不是常量,所以需要使用'malloc'或'new'動態分配較小的數組。如果允許使用,我建議使用vector。 – ChrisW

1

你的程序不擦除部件陣列的,其應該簡單地不打印它的最後部分(如果我正在閱讀你的問題)。

爲此,您可以保留另一個包含最後可用索引的變量,並循環,直到達到該範圍。

如果你真的想從數組中刪除條目,我建議你使用std::vector來代替。

0

有幾種方法可以從數組中刪除元素,但是不會找到一個刪除末尾爲零的所有元素的函數。

你需要自己照顧這個。你需要的是找到最後一個非零元素的數組長度。你可以這樣做,但向後遍歷數組:

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

length將有數組的長度,你可以使用這個在打印您陣列

相關問題