理解这行代码的作用

understanding what this line of code does

本文关键字:作用 代码      更新时间:2023-10-16

所以我应该写一个函数来删除重复项,并且很难理解某一行。

void repeat(char arr[], int times[],int &arraySize)
{
{
for(int i = 0; i<arraySize; i++)
{
for(int j =i+1; j<arraySize; j++)
{
if(arr[i]==arr[j])
{
for(int c = j; c < arraySize-1; c++){
arr[c] = arr[c+1];
}
arraySize--;
}
}
}
}
}

***for(int c = j; c < arraySize-1; c++){
arr[c] = arr[c+1];***

这些行是否一直循环到数组的最后一个元素?关于arr[c]=arr[c+1]也有点困惑;我们为什么需要它?

要删除数组中的一个元素(无论是否重复——这无关紧要(,必须将所有剩余元素下移一个位置,以覆盖被删除的元素。当我们说"移动"时,实际上是指"复制"。

因此,您看到的循环将从jarraySize - 1的每个元素替换为紧随其后的元素。最后一个元素不需要被替换,事实上也没有被替换,因为语句arraySize--;确保它永远不会被考虑。

(另外,如果你仔细想想,如果它被替换,它会被替换成什么?在[arraySize]位置没有元素!C++数组是从零开始索引的,所以有效元素是从[0][arraySize - 1]。(