2015-04-08 103 views
1

我正在嘗試完成以下任務:在C++中對字符串數組進行排序

按字母順序列出學生,按姓氏排序。 不要更改名稱的給定大小寫。 不要更改輸出文件格式。 (名字姓氏) 只需打印順序按姓氏的記錄,即

安妮Ĵ

Martin K製作

託比大號

這類需要是真實的字母(而不僅僅是「辭典「排序)。

從文件中讀取數據並通過虛函數傳遞,具體取決於該學生註冊的課程。以下是我擁有的。

for (int i = 1; i < numStudents; i++) 
{ 
    if ((list[i] -> getLastname()) < (list[i - 1] -> getLastname())) 
    { 
     Student *temp = list[i - 1]; 
     ist[i - 1] = list[i]; 
     list[i] = temp; 
    } 
} 

我一直在這個工作了一段時間,我擔心我已經走了這一切都錯了。任何提示/指針讚賞!

+1

名單上你(基本上)實現的冒泡排序的內部循環。這不足以分類任何東西。爲什麼不使用'std :: sort'?它也似乎是你的程序可能訪問你的'list'數組的邊界之外,這也是非常危險的。 –

+0

對不起,我對編程有點新,但仍然試圖弄糟字符串函數。我會看一看!謝謝! – JMoore

+0

我不允許使用算法庫:( – JMoore

回答

1

我想你有一個像這樣的結構:

struct Student 
{ 
    std::string m_LastName; 
    std::string m_FirstName; 
}; 

現在您需要確保您可以處理兩個人姓氏相同的情況。在這種情況下,你想看看名字。

bool NameCompare(const Student &name1, const Student &name2) 
{ 
    if(name1.m_LastName == name2.m_LastName) { 
     return name1.m_FirstName < name2.m_FirstName; 
    } 

    return name1.m_LastName < name2.m_LastName; 

}

然後,只需調用排序你的學生

std::list<Student> student_list; 
// add some Student to the list 
student_list.sort(NameCompare); 
相關問題