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

Posted

技术标签:

【中文标题】为啥名称在我的数组中重复,我将如何获得一个 txt 文件进行排序【英文标题】:Why are the name repeating in my array, and how would i get a txt file to sort为什么名称在我的数组中重复,我将如何获得一个 txt 文件进行排序 【发布时间】:2015-05-11 00:19:48 【问题描述】:

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

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

    

【问题讨论】:

我建议在原始指针上使用std::vector。我看到你忘记释放nameOfStudent 的内存了。我还建议将名称和分数组合成一个数据结构,然后跟踪一个动态数组而不是两个。 不能reproduce。 【参考方案1】:

你在这里有一个逻辑错误,当不需要交换时,你实际上是在交换错误的信息(丢失了 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; 
     

【讨论】:

谢谢!!!,这就是我要找的东西,我就是想不通,如果不是很麻烦,我将如何从一个文本文件 您可以将文本信息读取到数组并使用 ifstream 对其进行排序。如果您有问题,请发布您的代码和文本文件的示例数据,以便人们提供帮助。

以上是关于为啥名称在我的数组中重复,我将如何获得一个 txt 文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何将标题名称添加到第一列[重复]

如何将图像的名称及其坐标写入 save.txt 文件?

将大双数写入txt文件C ++ [重复]

如何在对象数组中查找具有特定名称的值

在我的情况下使用 Set 删除数组中的重复元素

如何从字符串数组中获取随机字符串 [重复]