Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么名称在我的数组中重复,如何获得要排序的txt文件_C++_Arrays_Sorting_Visual C++ - Fatal编程技术网

C++ 为什么名称在我的数组中重复,如何获得要排序的txt文件

C++ 为什么名称在我的数组中重复,如何获得要排序的txt文件,c++,arrays,sorting,visual-c++,C++,Arrays,Sorting,Visual C++,输入测试的分数和名称后,输出将创建 重复名字,例如,我输入埃里克,德里克,约翰,迪克 输出可能是erick,derick,derick,derick 我也不知道我将如何修改这个程序来打开一个txt文件 对数据进行排序 // main.cpp // Program 9.4 #include <iostream> #include<string> using namespace std; void sortScore

输入测试的分数和名称后,输出将创建 重复名字,例如,我输入埃里克,德里克,约翰,迪克

输出可能是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;
        }

    }
//main.cpp
//方案9.4
#包括
#包括
使用名称空间std;
void-sortScore(int*,int,string*);
int main()
{
国际学生人数;
不能对学生进行分类;
整数*分数=新整数[学生人数];
string*nameOfStudent=新字符串[numberOfStudents];

对于(int i=0;i您在这里有一个逻辑错误,当不需要交换时,您实际上是在用错误的信息交换(丢失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; 
       }
    }

用于(startScan=0;startScan建议在原始指针上使用
std::vector
。我发现您忘记了释放
nameOfStudent
的内存。我还建议将名称和分数合并到一个数据结构中,然后跟踪一个动态数组,而不是两个。不行。谢谢!!!,这是我正在寻找的,我只是c。)我不明白,如果这不是一个大麻烦,我该如何打开文本文件中的信息您可以将文本信息读取到数组中,并使用ifstream对其进行排序。如果您有问题,请发布您的代码和文本文件的示例数据,以便人们能够提供帮助。
    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; 
     }