了解这行代码的作用

时间:2019-11-01 21:00:09

标签: c++

因此,我应该编写一个删除重复项的函数,并且很难理解某一行。

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]也有些困惑;我们为什么需要那个?

1 个答案:

答案 0 :(得分:0)

要删除数组中的元素(无论是否重复-无关紧要),您必须将所有其余元素向下移动一个位置,以覆盖要删除的元素。当我们说“移动”时,我们实际上是指“复制”。

因此,您看到的循环将jarraySize - 1中的每个元素替换为紧随其后的元素。最后一个元素不需要替换,实际上也不需要替换,因为语句arraySize--;确保不再考虑该元素。

(另外,如果您考虑过,如果要替换,将用什么替换?在位置[arraySize]上没有元素!C ++数组从零开始索引,因此有效元素为从[0][arraySize - 1]。)