如何使用索引交换预定义的数组元素

How do I swap a pre defined array element using an index?

本文关键字:数组元素 预定义 交换 何使用 索引      更新时间:2023-10-16

我正在尝试交换两个初始化字符串的数组元素(请参阅下面的代码),我以为我知道如何做到这一点,但我尝试的方式似乎不起作用。我们不允许使用"交换"功能,我在许多其他论坛上看到过类似的问题。因此,我使用了一个临时索引变量来交换它们,但这似乎不起作用。不确定如何修复它并使其发挥作用,所以我的问题是如何做到这一点。

我对编程还很陌生,所以答案对我来说可能还不那么明显。我已经盯着这个看了一段时间,仍然看不见,我也试着在reddit上问,但他们没有给我一个非常简洁或有用的答案。如果你能帮我解释为什么它不会交换元素,那将是非常棒的,如果你看到我可以做的任何其他错误或改进,请告诉我,非常感谢你的反馈,谢谢!

代码:

#include <iostream>
using namespace std;
void printArray(string names[]) {
    for (int i = 0; i < 7; i++) {
        cout << names[i] << " ";
    }
}
int main() {
    int x = 0, a, b;
    string answer, name1, name2;
    string index;
    string names[7] = {"John", "Dave", "Jim", "Amanda", "Kelsey", "Don",   "Jennifer"};
    printArray(names);
    while (x < 1) {
        cout << endl << "Do you want to swap students? " << endl;
        cin >> answer;
        if (answer == "Yes" || answer == "yes") {
            cout << "Who would you like to swap?" << endl;
            cin >> name1;
            for(a = 0; a < 7; a++) {
                if (names[a] == name1) {
                    cout << "Yes, " << name1 << " is in the line." << endl;
                }
            }
            cout << "Who would you like to swap " << name1 << " for?" << endl;
            cin >> name2;
            for(b = 0; b < 7; b++) {
                if (names[b] == name2) {
                    cout << "Yes, " << name2 << " is in the line!!" << endl;
                    index = names[a];
                    names[a] = names[b];
                    names[b] = index;
                    printArray(names);
                }
            }

        } else {
            cout << endl << "Thanks, please behave now, students!" << endl;
            x++;
        }
    }
    return 0;
}

更多上下文:

打印出当前类的排列(即,数组的当前内容,按顺序排列)。向用户提示是否要交换2名学生。如果他们同意,则继续执行步骤3。询问用户要交换的两名学生的姓名。如果两个学生都在数组中,则交换他们在数组中的位置。如果其中一名学生不在课堂上,请在控制台上打印一条错误消息,例如"对不起,您必须选择两名在排队的学生!"。无论步骤4的结果如何,请返回步骤1。

在搜索name1时,无论是否找到,循环都会运行到7,这会干扰您的交换任务:

index = names[a];  //a=7
names[a] = names[b];  //a=7
names[b] = index;.

使用break:

if (names[a] == name1) {
        cout << "Yes, " << name1 << " is in the line." << endl;
        break;
        }

在进行交换时,a的值始终为7!所以它不起作用。