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

时间:2015-10-27 18:25:22

标签: c++ arrays eclipse for-loop

我试图交换两个初始化字符串的数组元素(参见下面的代码),我想我知道怎么做,但我尝试的方式似乎并没有起作用。我们不允许使用" swap"我在许多其他论坛上看到的问题与我的问题类似。因此,我使用了一个临时索引变量来交换它们,但这似乎并没有起作用。不知道如何解决它并使其工作,所以我的问题是我该怎么做。

我对编程很陌生,所以答案对我来说可能不那么明显。我已经盯着这一段时间而仍然无法看到它,我也试过询问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步。 询问用户要交换的两个学生的姓名。 如果两个学生都在阵列中,则在阵列中交换他们的位置。如果学生不在班级中,请在控制台上打印错误消息,例如&#34;对不起,您必须挑选2名在线的学生!&#34;。 无论步骤4的结果如何,返回步骤1。

2 个答案:

答案 0 :(得分:2)

在搜索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;
        }

答案 1 :(得分:0)

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