最近开始做课设,发现了不少问题,其中之一就是如何去删除数组中重复的元素,当我第一次遇到这个问题就不知所措了
通过查找资料,总结以下的学习方法。
//创建数组
int m_Array[10] = { 1,1,2,2,3,3,4,4,5,5 };
//计算数组长度
int len = sizeof(m_Array) / sizeof(int);
//输出第一个数据
cout << m_Array[0] << endl;
//函数实现
for (int i = 0; i < len; i++) { //每次循环判断m_Array[i]的值是否重复
for (int j = i + 1; j < len;) { //暂时不给出循环条件,若出现重复数据,
if (m_Array[i] = m_Array[j]) { //判断某一个数据和后面的数据是否相同
for (int m = j; m < len - 1; m++) { //若相同,将后面的数据向前移动,覆盖前面的数据,则数组长度减小,即长度变为len - 1
m_Array[m] = m_Array[m + 1];
}
len--; //循环条件,数据长度减一
}
else { //如果某一个数据与后面的数据不同,则这个数据与后面数据的后面一个数据比较是否相同
cout << m_Array[j] << endl;
j++;
}
}
注意:在第二个 for 循环中,注意并不需要写循环条件。因为我们需要删除数组中重复的元素。那么,随着数据的删除吗,数组的长度也在发生着变化,越来越小。如果某一个元素和其后面的一个元素的数据相同,则将后面一个数组的数据赋值给该数组,数组的长度减一,因此执行 len-- 的代码。如果这个数组的数据与后面元素的数据不同,则输出这个数据;但是需要注意的是,数据是从第二个数据开始输出的,因此需要在一开始就输出第一个数组的数据。同时,此时在第二个for循环中遍历后面的数组元素,经过第一遍第二个 for 循环遍历后,m_Array数组元素如下:
int m_Array[9] = {1,2,2,3,3,4,4,5,5};
此时第二次进入第一个 for 循环, i = 1 ,第二次进入第二个 for 循环;此时j = i + 1 = 2;进入if判断语句,即判断此时的m_Array[1] 和m_Array[2]是否相等,相等则利用m_Array[2]的值覆盖m_Array[1],同时 len-- ,此时数组的数据如下:
int m_Array[8] = {1,2,3,3,4,4,5,5};
直到最后数组数据如下:
int m_Array[5] = {1,2,3,4,5};
最终实现了函数的目的。
个人心得:突然发现自己的编码能力很一般,甚至于说,不如大多数人,但是这是每一个人的必经之路,需要时间的积累,希望大家和我一样,在这一条道路上越走越远,永不言弃!!!
一个人的必经之路,需要时间的积累,希望大家和我一样,在这一条道路上越走越远,永不言弃!!!