因此作业时我遇到了一个问题,希望我在一个数组中反转元素。
void main() {
int myarray[6] = { 12,45,23,123,23,27 };
int arraylength = 6;
int temp;
for (int i = 0; i < arraylength/2; i++)
{
temp = myarray[i];
myarray[i] = myarray[(arraylength - 1) - i];
myarray[(arraylength - 1) - i] = temp;
cout << temp;
}
}
谁知道我哪里出错了?我似乎无法让它在相当长的一段时间内一直在努力
预期产出为(27,23,123,23,45,12)
答案 0 :(得分:2)
你的程序工作正常,你的输出不起作用。您需要添加一个循环来打印已经反转的数组的所有元素:
for (int i = 0; i < 6; ++i)
{
cout << myarray[i] << " ";
}
对于更新的循环,您需要打印myarray[i]
,而不是temp
。并且它不会工作,因为你的循环只迭代了一半的元素
答案 1 :(得分:2)
您的程序是正确的,但您应该使用循环来打印所有元素:
for(auto x : myarray)
srd::cout << x << ", ";
您也可以使用std::reverse
反转它:
int myarray[] {12, 45, 23, 123, 23, 27 };
std::reverse(std::begin(myarray), std::end(myarray));
for(auto e : myarray)
std::cout << e << ", ";
答案 2 :(得分:2)
反转算法本身很好,它会旋转中心周围的所有元素,从而反转数组。它相当于使用std::swap
函数:
for (int i = 0; i < arraylength / 2; i++) {
std::swap(myarray[i], myarray[arraylength - i - 1]);
}
但是您正在打印元素之前来反转数组。而且由于i < arraylength / 2
条件,你只有一半时间这样做。首先反转数组并引入第二个for
循环进行打印:
for(auto el : myarray)
std::cout << el << ' ';
或者只需使用std::reverse并让标准库解决这个问题:
#include <iostream>
#include <algorithm>
int main() {
int myarray[] = { 12, 45, 23, 123, 23, 27 };
std::reverse(std::begin(myarray), std::end(myarray));
for (auto el : myarray) {
std::cout << el << ' ';
}
}
据说myarray[(arraylength - 1) - i];
中的括号是一种矫枉过正的行为。您可以将其删除并拥有myarray[arraylength - i - 1];