在c ++中移动数组元素

时间:2018-05-22 05:27:17

标签: c++ arrays

  

编写一个使用大小为8(8)的数组的程序,然后提示   用户为数组输入八个整数。该计划应该做   以下内容:

     
      
  1. 打印输入/输出样本中给出的输出中的数字。
  2.   
  3. 提示用户输入一个整数值k,然后程序将数组元素的k个位置向右移,而最后一个   K个元素被移动到数组的开头。例如:if   我们有一个数组[1 2 3 4 5 6 7 8],向右移动2个位置   应该给阵列[7 8 1 2 3 4 5 6]。
  4.   

我做了这个问题,但我得到了输出(如果假设班次数= 3) [1 0 3 1 2 3 4 5]这是错误的,输出应该是[6 7 8 1 2 3 4 5]

这是我的代码,这是什么错误?

#include<iostream>

using namespace std;

int main()
{

    int arrays[8];
    int k;


    cout<<"Enter Values for a Arrays of size 8"<<endl;
    for(int i=0; i<8; i++)
    {
        cin>>arrays[i];
    }


    cout<<"You Entered Numbers are: [ ";
    for(int i=0; i<8; i++)
    {
        cout<<arrays[i]<<" ";
    }
    cout<<" ]\n";

    cout<<"Enter the Number of Shift: ";
    cin>>k;

    for(int i=8; i>0; i--)
    {

        arrays[i]=arrays[i-k];
    }

    //The Output
    for(int i=0; i<8; i++)
    {
        cout<<arrays[i]<<" ";
    }


    return 0;
}

1 个答案:

答案 0 :(得分:1)

错误在

for(int i=8; i>0; i--)
{

    arrays[i]=arrays[i-k];
}

首先,当i<3获得负面索引时。您可以使用返回提醒的%运算符来解决此问题。

其次,您要覆盖仍然必须复制的值。例如,假设移位为3:在第一次迭代中,您将第五个元素复制到第八个元素内。但是你也应该把第八个复制到第三个。

一个简单的解决方案是声明一个新数组并执行以下操作:

int shifted[8];
...
for (int i=0; i<8; i++)
{
    shifted[i] = arrays[(i-k)%8] 
}

还考虑使用C ++向量。