c++ - 在数组 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
解决方案
您可以读取输入src
和dst
字符串。
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]);
推荐阅读
- javascript - Cytsocape.js 无法在 for 循环中创建边
- java - 如何将 HttpClient 与任何 ssl 证书一起使用,无论它有多“糟糕”
- git - Git通过清除reflog撤消所有更改?
- mainframe - 使用 SORT 从输入文件中提取数据到不提供预期数据的不同输出文件
- android - 配置变更时如何观察 WorkManager?
- python-3.x - 我如何区分 log2(2^5910-1) 和 log2(2^5910)?两者都给 5909.9999999999
- node.js - CastError:转换为嵌入的值失败
- bash - 用于打印包含用户添加的单词的行的 Shell 脚本
- typo3 - TYPO3 9.5 带有损坏链接的简单 TMENU
- angular - Angular - 未捕获的错误导致重定向回基本 URL