在Student类之间对名称进行排序

时间:2014-09-26 00:44:20

标签: c++ visual-studio-2013 cin

修改。我要感谢在我的代码中帮助我的两个人。我在PST 9/25/2014下午7:22修复了我的编码。虽然排序仍有问题。

所以我试图自学如何使用C ++来超越我在学校的编程课程。我已经学习了Java,所以我对编码结构比较熟悉,但不确定要输入什么。这个练习题是:

1)询问用户他想在列表中输入多少人。

2)阅读3个字符串,然后将该信息转换为学生班,并将学生放在矢量中。

3)按名称对列表进行排序。 (额外的功劳是按学生ID对列表进行排序)

4)打印列表中每个学生的信息。

5)在回答是' Y'时询问用户,在列表中搜索名称并打印与名称相关的信息

在Java中,这看起来很简单,我很难理解C ++中发生的事情。

我目前只完成了1,2,4和5次。这是我到目前为止所做的。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <fstream>
#include <iomanip>

using namespace std;

class Student
{
    string myName, myStudentID, myClassID;
public:
    Student(string name, string studentID, string classID)
    {
        myName = name;
        myStudentID = studentID;
        myClassID = classID;
    }

    string getName() { return myName; }
    string getStudentID() { return myStudentID; }
    void printInfo() { cout << myName << setw(15) << myStudentID << setw(10) << myClassID << endl; }



};

int main()
{
    int num;
    std::vector<Student> studentList;
    cout << "How many students do you wish to add to the student list ? " << endl;
    cin >> num;


    cin.ignore();
    for (int a = 0; a < num; a++)
    {

        string inputName, inputStudentID, inputClassID;
        //get name
        cout << "Please enter the Student name : ";
        getline(cin, inputName);


        //get student ID
        cout << "Please enter the Student ID number : ";
        getline(cin, inputStudentID);


        //get class ID
        cout << "Please enter the Student class ID : ";
        getline(cin, inputClassID);



        Student thisStudent(inputName, inputStudentID, inputClassID);
        studentList.push_back(thisStudent);

        cout << endl;
    }

    //sort(studentList.begin(), studentList.end());
    /*
    I never figured out how to sort the list by name.
    I do not know how to compare the name of studentList[0] and studentList[1]
    to put them in alphabetical order.
    */
    cout << endl;; // FORMATTING

    cout << "The student list has a size of " << studentList.size() << endl;

    cout << endl;; // FORMATTING


    cout << "Student Name" << setw(15) << "Student ID" << setw(10) << "Class ID" << endl;
    for (int a = 0; a < studentList.size(); a++)
    {
        studentList[a].printInfo();
    }

    cout << endl;; // FORMATTING


    string searchedName;
    char answer;
    do
    {
        cout << endl;; // FORMATTING
        cout << "Please type the name of the person you want to search for: ";
        getline(cin, searchedName);
        for (int a = 0; a < studentList.size(); a++)
        {
            if (searchedName.compare(studentList[a].getName()) == 0)
            {
                studentList[a].printInfo();
                break;
            }
            else
                if (a == (studentList.size() - 1)) //If went to end of the list, tell them name not found.
                    cout << "There is no " << searchedName << " in the list. \n";


        }

        cout << "Would you like to search for another person? \n";
        cout << "Y for Yes, N for No. \n";
        cin >> answer;
        cin.ignore();

    } while (answer == 'Y' || answer == 'y');


    return 0;




}

1 个答案:

答案 0 :(得分:0)

您可以在类Student中创建静态比较函数以与std :: sort

一起使用
class Student
{
    string myName, myStudentID, myClassID;
// ...
    static bool compare_name(const Student & lStudent, const Student & rStudent)
        {return (lStudent.myName < rStudent.myName);}
};
// ...
    std::sort(studentList.begin(), studentList.end(), Student::compare_name);

或者如果您的编译器支持lambda函数:

    std::sort(studentList.begin(), studentList.end(),
        [studentList](const Student & lStudent, const Student & rStudent)
            {return (lStudent.myName < rStudent.myName);});