移动数组C++中的特定元素

Moving Specific elements in an array C++

本文关键字:元素 数组 C++ 移动      更新时间:2023-10-16

我正在尝试以特定的方式交换数组中的元素。

我创建了一个一维数组,但我用二维显示它。目标是将元素从一个位置交换到另一个位置。我在下面开发了自己的交换代码,让用户选择他想和另一个元素切换的元素。

我的问题或我需要帮助的地方是,我如何让用户输入A0,并将A0处的内容与A1交换。

以下是我一直试图开发这个解决方案的代码,但无法同时实现这两个想法。

所以基本上现在A0=4,A1=3。所以目标是让A0=3,A3=4。下面的代码顶部是我创建的一个引用表,用于查看初始数组。在未来,我还想开发另一种输入,其中用户可以输入L或R来交换元素的左侧或右侧。。但这将是另一次的担忧。在我了解如何操作之后。

#include <iostream>
using namespace std;
//     0 1 2 3 4
//    ------------  //
// A | 4 3 2 1 5  | //    In  1-d A is 0-4 elements
// B | 7 6 8 9 10 | //    In  1-d B is 5-9 elements
//    ------------
int main()
{
int number[10] = { 4, 3, 2, 1, 5, 7, 6, 8, 9, 10 };
int temp = 0;
int src = 0;
int des;
int n = 0;
// Below was me trying to take an user input to move within elements in A. Its flawed because if n is greater that 4 it goes into B section which is what I dont need.
cout << "Choose an n: " << endl;
cin >> n; // The n helps to direct Which position in A so if i want to acces A4 the n needed to input is 4
int A = number[0 + n];
int B = number[5 + n];
cout << A << endl;
cout << "Before the swap array is: " << endl;
for (int i = 0; i < 10; i++) {
if (i % 5 == 0) {
cout << endl;
}
cout << number[i] << " ";
}
cout << endl;
cout << "Choose starting position" << endl;
cin >> src;
cout << "Choose ending position" << endl;
cin >> des;
temp = number[src];
number[src] = number[des];
number[des] = temp;
cout << "After the swap the array is:" << endl;
for (int i = 0; i < 10; i++) {
if (i % 5 == 0) {
cout << endl;
}
cout << number[i] << " ";
}
return 0;
}

这里还有它目前如何运行的在线视图。。。。。。https://onlinegdb.com/Sk2DEDG9S

您可以将输入srcdst都读取为字符串。

std::string src, dst;
std::cin >> src >> dst;

您可以使用确定索引

int idxSrc = (src[0] == 'A' ? 0 : 5) + src[1] - '0';
int idxDst = (dst[0] == 'A' ? 0 : 5) + dst[1] - '0';

如果用户输入例如A3,则索引被确定为0+3=3。如果用户输入B2,则索引被确定为5+2=7。在带有'A' + 1 == 'B'的系统上,您也可以使用

int idxSrc = 5 * (src[0] - 'A') + src[1] - '0';
int idxDst = 5 * (src[0] - 'A') + dst[1] - '0';

然后你可以用交换它们

std::swap(numbers[idxSrc], numbers[idxDst]);