为什么名称在我的数组中重复,我如何获得一个 txt 文件进行排序

Why are the name repeating in my array, and how would i get a txt file to sort

输入测试分数和姓名后,输出创建 重复名字,例如。我输入 erick,derick,john,dick

输出可能是 erick , derick, derick, derick

我也不确定如何修改这个程序来打开一个 txt 文件 对数据进行排序?

    //  main.cpp
    //  Program 9.4


    #include <iostream>

    #include<string>
    using namespace std;

    void sortScore(int *, int, string*);

    int main()
    {
        int numberOfStudents;
        cout << "Enter the number of students: " << endl;
        cin >> numberOfStudents;

        int* score = new int[numberOfStudents];
        string* nameOfStudent = new string[numberOfStudents];

        for (int i = 0; i<numberOfStudents; i++)
        {
            cout << "\nEnter Student " << i + 1 << "'s name: " << endl;
            cin >> nameOfStudent[i];
            cout << "\nEnter his/her score: " << endl;
            cin >> score[i];
        }

        sortScore(score, numberOfStudents, nameOfStudent);

        cout << "\nStudent Scores organized from lowest to highest:" << endl;
        for (int i = 0; i<numberOfStudents; i++)
        {
            cout << "\n" << nameOfStudent[i] << "\t\t" << score[i];
        }

        cout << endl;

        delete[] score;
        score = 0;

        system("pause");
        return 0;
    }

    void sortScore(int *score, int size, string* name)
    {
        int startScan, minIndex;
        int minValue;
        string minName;

        for (startScan = 0; startScan<(size - 1); startScan++)
        {
            minIndex = startScan;
            minValue = score[startScan];

            for (int index = startScan + 1; index<size; index++)
            {
                if (score[index]<minValue)
                {
                    minValue = score[index];
                    minIndex = index;
                    minName = name[index];
                }
            }
            score[minIndex] = score[startScan];
            score[startScan] = minValue;
            name[minIndex] = name[startScan];
            name[startScan] = minName;
        }

    }

你这里有一个逻辑错误,当不需要交换时,你实际上交换了错误的信息(丢失了 minName)。

试试这个:

    for (startScan = 0; startScan<(size - 1); startScan++)
    {
        minIndex = startScan;
        minValue = score[startScan];

        for (int index = startScan + 1; index<size; index++)
        {
            if (score[index]<minValue)
            {
                minValue = score[index];
                minIndex = index;
                minName = name[index];
            }
        }
        if(minIndex != startScan) {
          score[minIndex] = score[startScan];
          score[startScan] = minValue;
          name[minIndex] = name[startScan];
          name[startScan] = minName; 
       }
    }

或者你必须携带minName:

    for (startScan = 0; startScan<(size - 1); startScan++)
    {
        minIndex = startScan;
        minValue = score[startScan];
        minName  = name[startScan]; 
        for (int index = startScan + 1; index<size; index++)
        {
            if (score[index]<minValue)
            {
                minValue = score[index];
                minIndex = index;
                minName = name[index];
            }
        }
        score[minIndex] = score[startScan];
        score[startScan] = minValue;
        name[minIndex] = name[startScan];
        name[startScan] = minName; 
     }