使用临时变量C ++反转数组

时间:2014-11-27 20:03:19

标签: c++ arrays reverse temp

尝试使用临时变量来反转数组中的元素。 我无法弄清楚如何做到这一点

int arraysize = 12;//Size of the array
int option;// Option to be switched
int list[12];//numbers in the array
int total = 0;// Total of all numbers initialised to zero
double average = 0;// average of all numbers
int largestNum = 0;//largest Number
int smallestNum = 6;//first number in the array
int NumberOccurance = 0;// number of times the checked number appears
int usernum;//number to be check for times it appears
int userscaleup;//number to be multiplied by the array contents
int tempnum;// store the value
int endarray;
ifstream infile("data.dat");
ofstream outfile("output.dat");

do
{
    cout << "\t7. Reverse Order\n";

    cin >> option;// Taking in the users option from the menu

    switch (option)

    case 7:

    case 7:

        for (int index = 0; index < arraysize/2; index++, endarray--)
        {
            infile >> list[index];

            int endarray = list[arraysize];// variable endarray holds value of end side of array

            int swapholder = list[index];

            list[index] = list[endarray];//Swap 

            list[endarray] = swapholder;


            cout << list[index] << ' ';

        }
        break;

        while (option != 9);
}

我一直在输出随机负数。试过多种解决方案。我已经注释掉的那一行也给出了随机的负数。

数组大小为12。

必须使用临时变量来执行此操作。有人可以告诉我这样做的正确方法吗?

编辑:更新了我的代码。该程序现在正在构建,但是当我运行它时它会崩溃。有什么建议吗?

6 个答案:

答案 0 :(得分:1)

尝试:

int temp = 0;
for (int index = 0, backwardsIndex = arraysize - 1; index < arraysize / 2; index++, backwardsIndex--)
{
    temp=list[index];
    list[index]=list[backwardsIndex];
    list[backwardsIndex]=temp;
}

答案 1 :(得分:0)

这是伪代码,但应该给你一个想法。在这里,我使用两个从阵列正面和背面向中间移动的计数器

count_front = 0;
count_back = max_array_element; //11
While ( count_front < count_back ) {

    temp_var = array[count_front];
    array[count_front] = array[count_back];
    array[count_back] = temp_var;
    count_front++;
    count_back--;

}

答案 2 :(得分:0)

临时变量用于交换:t = list [1]; list [1] = list [2];列表[2] =吨; 要反转数组,交换第一个和最后一个元素(最小和最大),然后是下一个最低(最小+ 1,最大-1),直到最小值> =最大。

答案 3 :(得分:0)

您的索引大小为12,并且您在索引中添加了11,因此在索引2处它将转到索引13 ....这超出了数组的范围..

如果你试图扭转它(比如make first last和last first),它需要看起来像这样:

    int otherside = arraysize; //set the otherside at the end of the array
    for (int index = 0; index < arraysize/2; index++)
        {
            int swapholder = list[index];    // V
            list[index] = list[otherside];   // Swap them
            list[otherside] = swapholder;    // ^

            otherside =-1; //move backward from end.
                           // moving forward from beginning is the index++

            cout << list[index] << '  ' << list[otherside] <<'/n';

        }

这意味着你定义2个变量,1个在开始时,1个在结束时,你在开始时取一个并在临时中保持它,取最后一个并保存它,然后取温度并保存在最后......你从头开始向前移动一次,然后重复一次,重复......重复应该是阵列大小的一半,因为它一次从两个方向移动,因此运动量的一半是需要

编辑:有2个case 7:,摆脱一个,这一定是导致崩溃的原因!

答案 4 :(得分:0)

简单地说,让标准库函数std::reverse为您完成工作。 (如果你的目标不是自己实施这个练习)

答案 5 :(得分:0)

除非以某种方式需要,否则不要使用数组。 请改用std::vector。 (要求你#include <vector>)。

然后你可以简单地做一些事情:

std::vector< int > list;
// fill vector. usually with list.push_back( item );

std::reverse( list.begin( ) , list.end( ) );

如果你想继续使用数组,你可以像这样反转它:

std::reverse( std::begin( list ) , std::end( list ) );

无需循环和交换。


如果您无法使用std::reverse

首先,如果您声明数组的最大大小使用它并将其声明为const并将其写为大写,那么您就会看到差异!

const int ARRAY_SIZE = 12; // const can't be changed runtime.

int list[ARRAY_SIZE]; // Not a good idea to name it list since it's not a list!

下一步:

分割循环不需要复杂的循环结构。

首先填充数组:

// fill array
for( int i = 0 ; i < ARRAY_SIZE ; ++i )
{
    infile >> list[i];
}

然后:

// declare this outside and give it a std. value so you don't redeclare it every run of the loop
int swapHolder       = 0;

// reverse array
for( int i = 0 ; i < ARRAY_SIZE / 2 ; ++i )
{
    swapHolder                  = list[i]; // save the value of first position
    list[i]                     = list[ARRAY_SIZE - 1 - i]; // fill it with the lastPosition - 1 - i
    list[ARRAY_SIZE - 1 - i]    = swapHolder; // replace lastPosition - 1 - i 
}

ARRAY_SIZE - 1因为数组可能包含12个值,但它从0开始,因此它的索引是0 - 11.

工作example

此外:

case 7:

case 7:

毫无意义。