我有一个系统可以自动读取存储在公司员工访问卡上的信息。这些信息存储在一个数组中。当读卡器不起作用时,员工必须在读卡器附近的键盘上输入他的名字和他的Pin来访问建筑物,并且读卡器将自动创建存储在阵列中的信息。数组的第三个第一个单元格总是用正确的值填充,其余的单元格用0填充。我的工作是访问这个数组并删除第三个元素之后的所有不相关的零,即使它在第三个元素之前存在0第三个要素,必须保留。
我有以下代码:
#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 这意味着,只有在数组的tird元素(此处为Track2 [2])之后必须从我的数组中删除= 0的值。 我该怎么办? 感谢
答案 0 :(得分:3)
如果您使用C ++,请使用std::vector。 std::vector
有erase
方法,请使用它。
#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;
}
答案 1 :(得分:1)
你的程序没有擦除数组的部分,它应该不打印它的最后部分(如果我正在读你的问题)。
为此你可以保留另一个变量,包含最后一个可用的索引,然后循环,直到你到达那个变量。
如果你真的想从阵列中擦除条目,我建议你改用std::vector
。
答案 2 :(得分: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];
答案 3 :(得分:0)
有一些方法可以从数组中删除元素,但是你找不到一个删除末尾所有零元素的函数。
你需要自己照顾好这个。你需要的是找到数组的长度直到最后一个非零元素。你可以这样做但向后遍历数组:
int length;
for(length=Taille; i>=0; --length) {
if (Track2[index] != 0) {
break;
}
}
length
将具有数组的长度,您可以将其用作打印数组的上限