首页 > 解决方案 > 在数组 C++ 中移动特定元素

问题描述

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

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

我的问题或我需要帮助的地方是如何让用户说输入 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

标签: c++arrays

解决方案


您可以读取输入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]);

推荐阅读