2016-09-26 80 views
1

因此,我必須允許用戶創建具有5種不同類型信息的一定數量的結構,然後根據其中一種類型進行排序。例如,他們會輸入所有的數據,然後按等級或名稱進行排序。我將如何去創建一個只包含不同結構中不同名稱或等級的數組?創建多個結構然後按元素排序

#include <iostream> 
#include <string> 

struct student 
{ 
    std::string studentName; 
    std::string studentIDNumber; 
    int currentExamGrade; 
    int priorExamGrade; 
    double GPA; 
}; 

void createStudent() 
{ 
    int numStudents; 
    std::cout << "Enter number of students\n"; 
    std::cin >> numStudents; 

    while (numStudents > 0) 
    { 
     student name; 

     std::cout << "Enter the student's name\n"; 
     std::cin >> name.studentName; 

     std::cout << "Enter the student's ID number\n"; 
     std::cin >> name.studentIDNumber; 

     std::cout << "Enter the student's current exam grade\n"; 
     std::cin >> name.currentExamGrade; 

     std::cout << "Enter the student's prior exam grade\n"; 
     std::cin >> name.priorExamGrade; 

     std::cout << "Enter the student's GPA\n"; 
     std::cin >> name.GPA; 

     numStudents -= 1; 
    } 
} 

int main() 
{ 
    createStudent(); 

    int choice; 
    std::cout << "How do you want to sort the list?\n (Enter 1 for name, 2  for ID number, 3 for current exam grade, 4 for prior exam grade, 5 for GPA\n"; 
    std::cin >> choice; 

    return 0; 

}  
+0

所以,Captn,哪裏是你要排序的數組?你讀的是學生,但讀完一個後,你丟棄數據並閱讀另一個數據。 –

+0

這是我的問題的一部分 – CptJohnMiller74

+1

好的。您需要閱讀[std :: vector](http://www.cplusplus.com/reference/vector/vector/)的時間 - 查看示例。 –

回答

0

好的。我假設你不知道C++中的內置排序函數。看看std::sort()

接受輸入:

input values into struct array + printing out

我們做出結構的數組:

How do you make an array of structs in C?

Creating an array of structs in C++

我們這些陣列進行排序:

Sorting a vector of custom objects

如何解決這個問題:

std::sort()允許您在此基礎上非tivial對象給自定義函數具有可比性。一個這樣的功能的示例是:

bool gpa_comparision_function (student s1,student s2) 
{ 
    return s1.GPA < s2.GPA; 
} 

它需要參數作爲需要由所述排序功能進行比較2名學生,並返回學生的排序S1和S2基於GPA。

這就是爲什麼s1.GPA < s2.GPA這個說法很重要。

因此,如果學生s1爲GPA = 5.0S2具有GPA = 4.0我們希望爲了S1,S2(升序)所以這個函數返回FALSE,指出S2應該來S1之前。

所以在排序函數的調用:

sort (arr_of_students,arr_of_students+N,gpa_comparision_function); 

通知的第三個參數,gpa_comparision_function,這說的是內置的功能,使用我們的比較功能。

Talk是便宜展示我的代碼:

#include <iostream> 
#include <string> 
#include <algorithm> 
using namespace std; 
struct student 
{ 
    std::string studentName; 
    std::string studentIDNumber; 
    int currentExamGrade; 
    int priorExamGrade; 
    double GPA; 
}; 
bool gpa_comparision_function (student s1,student s2) 
{ 
    return s1.GPA < s2.GPA; 
} 
bool currentExamGrade_comparision_function (student s1,student s2) 
{ 
    return s1.currentExamGrade < s2.currentExamGrade; 
} 
int main() 
{ 
    // Create an array of structs 
    student arr_of_students[100]; // A better way will be vector<student> 

    // Take input 
    // ... 

    // Now lets sort, assuming number of students is N 
    // Based on GPA 
    sort (arr_of_students,arr_of_students+N,gpa_comparision_function); 

    // Based on currentExamGrade 
    sort (arr_of_students,arr_of_students+N,currentExamGrade_comparision_function); 

    return 0; 
} 
+0

如果你踩着提供代碼路徑,至少要一路走 - 告訴他如何閱讀這些結構,並向他解釋發生了什麼**。否則,這是虛空的行爲或最壞的聲譽 - 這與幫助他學習無關。 –

+0

@AdrianColomitchi我已經添加了使用自定義比較函數的解釋。我不打算解釋如何輸入。我會找到一個鏈接,提供答案 – PRP

相關問題