用户必须从任意数量的数字中创建数组,我需要重新排列数组,以便来自偶数位置的元素将移动到数组的开头,从UNEVEN位置移动到最后。例如,A=[1,2,3,4,5,6]
会变成B=[2,4,6,1,3,5]
。此外,我需要使用 POINTERS ....我的指针非常糟糕,所以非常感谢帮助。
这就是我自己。我不是在这里使用指针,因为我不知道如何...... :(
void switcharoo(int a, int b[]){
int temp[a], j=0;
for(int i=1;i<a;i+=2){
temp[j] = b[i];
j++;
}
for(int i=0;i<a;i+=2){
temp[j] = b[i];
j++;
}
b = temp;
}
答案 0 :(得分:0)
Oups,你仍然需要提高你的C ++知识......
int temp[a]
无效C ++,因为您在评论中被告知 - 可变长度数组是C功能b
作为指针传递(数组在传递给函数时衰减到指向其第一个元素的指针)。当您在函数结束时编写b=temp;
时,您只会更改本地副本...它会立即超出范围:简而言之,当前代码只是一个无操作。如果你想训练使用指针,你可以这样做:
void switcharoo(int a, int b[]) {
int *even = new int[a]; // allocate an array of same size
int *odd = even + a / 2; // point at the mid array element
for (int i = 0; i<a - 1; i += 2) {
*odd++ = b[i]; // odd elements in high part
*even++ = b[i + 1]; // even in low part
}
if (0 != a % 2) { // one odd element remains
*odd++ = b[a - 1];
}
even = odd - a; // make even point again to start of allocated array
odd = even; // store a copy
for (int i = 0; i<a; i++) { // copy back in original array
b[i] = *even++;
}
delete[] odd; // and delete the allocated array
}