У меня есть массив 2d, содержащий числа, в которых я хотел бы переместить все элементы на один и иметь последнее значение в каждой строке, перенесенное на первый элемент. Например, строка, содержащая 1, 2, 3, будет преобразована в 3, 1, 2.
До сих пор мне не удавалось использовать оператор сдвига в ячейках памяти массива, который я хочу изменить. Я думал, что смогу поместить все значения в новый массив, затем поменять местами первое и последнее значения, расположенные по этим адресам, а затем сдвинуть последние 8 значений. Неудачно.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int const ROWS = 4;
int const COLS = 9;
int numberTable[ROWS][COLS] = {
{1, 2, 3, 4, 5, 6, 7, 8, 9},
{7, 2, 8, 4, 5, 4, 7, 3, 1},
{9, 9, 7, 4, 9, 9, 8, 7, 6},
{6, 3, 7, 4, 5, 4, 5, 7, 9}
};
int shiftTable[ROWS][COLS];
unsigned int num1 = 0;
unsigned int num2 = 0;
unsigned int num3 = 0;
unsigned int num4 = 0;
unsigned int newNum1 = 0;
unsigned int newNum2 = 0;
unsigned int newNum3 = 0;
unsigned int newNum4 = 0;
unsigned concatenate(unsigned, unsigned);
int _tmain(int argc, _TCHAR* argv[])
{
int *ptrTable;
ptrTable = &numberTable[0][0];
for (int i = 0; i <= 8; i++){
newNum1 = numberTable[0][i];
newNum2 = numberTable[1][i];
newNum3 = numberTable[2][i];
newNum4 = numberTable[3][i];
num1 = concatenate(num1, newNum1);
for (int j = 0; j < 4; j++){
numberTable[0][i] >>= 1;
cout << "Before table shift: "<<ptrTable << endl;
*ptrTable >>= 1;
cout << "After Table Shift: "<<ptrTable << endl;
}
}
num1 = concatenate(num1, newNum1);
unsigned int *num1ptr;
num1ptr = &num1;
cout << *num1ptr << endl;
*num1ptr >>= 1;
cout << *num1ptr<< endl;
num1 >>= 1;
cout << num1;
getchar();
return 0;
}
unsigned concatenate(unsigned x, unsigned y) {
unsigned pow = 10;
while (y >= pow)
pow *= 10;
return x * pow + y;
}
>>
. - person GreatAndPowerfulOz   schedule 28.10.2015