我在选择排序方面遇到问题,我正在尝试按字母顺序对学生名称进行排序。我编译它并在VS中显示了一大堆错误。
我不认为它与我的显示所有学生的功能有关,我认为它更多地与SortByName和SortByScoreFunctions有关
感谢任何帮助谢谢!
这是我程序的结构。
struct StudentType
{
string studentName;
int testScore;
char grade;
};
void SortStudentsByName(StudentType student[], int numStudents)
{
int startScan, minIndex, FirstInAlphabet;
for (startScan = 0; startScan < (NUM_STUDENTS-1); startScan++)
{
minIndex = startScan;
FirstInAlphabet = student[0];
for( int index = startScan+1; index < NUM_STUDENTS; index++)
{
if ( student[index] > FirstInAlphabet)
{
FirstInAlphabet = student[index];
minIndex = index;
}
}
}
}
void SortStudentsByScore(StudentType student[], int numStudents)
{
int startScan,
minIndex,
lowest;
for (startScan = 0; startScan < (NUM_STUDENTS-1); startScan++)
{
minIndex = startScan;
lowest = student[0].testScore;
for ( int index = startScan+1; index < NUM_STUDENTS; index++)
{
if( student[index].testScore < lowest)
{
lowest = student[index].testScore;
minIndex = index;
}
}
student[minIndex].testScore = student[startScan].testScore;
student[startScan].testScore = lowest;
cout <<"List of Students sorted by Score from Highest to Lowest" << endl;
DisplayAllStudents(student, numStudents);
}
}
void DisplayAllStudents(const StudentType student[], int numStudents)
{
cout << endl;
FormatNameScoreGrade(cout);
for(int i = 0; i < numStudents; i++)
{
cout << setw(20) << student[i].studentName << setw(10) << student[i].testScore << setw(10) << student[i].grade << endl;
}
cout << endl;
EndOfList(cout);
}
当我在这里编译是我收到的输出
这些是按名称排序
的输出结果Fibonacci, Leonardo 63 D
Huffman, David 79 C
Augusta, Ada 91 A
Goldbach, Christian 81 B
Venn, John 100 A
Church, Alonzo 72 C
Fermat, Pierre 84 B
Kruskal, Joseph 66 D
Cantor, Georg 67 D
Turing, Alan 85 B
Chebysheva, PL 100 A
DeMorgan, Augustus 79 C
Karnaugh, Maurice 72 C
Babbage, Charles 98 A
Hooper, Grace 95 A
它不在这里工作
这是我按最高等级排序的输出
Student Name Test Score Grade
------------------------------------------
-858993460 D
Huffman, David-858993460 C
Augusta, Ada-858993460 A
Goldbach, Christian-858993460 B
Venn, John-858993460 A
Church, Alonzo-858993460 C
Fermat, Pierre-858993460 B
Kruskal, Joseph-858993460 D
Cantor, Georg-858993460 D
Turing, Alan-858993460 B
Chebysheva, PL-858993460 A
DeMorgan, Augustus-858993460 C
Karnaugh, Maurice-858993460 C
Babbage, Charles-858993460 A
Hooper, Grace-858993460 A
答案 0 :(得分:0)
您应该使用类std :: string中的compare来实现此目的。有关比较外观here的信息。 另一个问题,你不是交换学生。 请访问wiki以获取Selection Sort。
这是我对您的问题的实施。我没有测试过,希望这会有效。
void SortStudentsByName(StudentType student[], int numStudents)
{
for(int i = 0;i < numStudents - 1; ++i)
{
int min = i;
for(int j = i + 1;j < numStudents; ++j)
{
if( student[i].studentName.compare(student[j].studentName) < 0 )
{
min = j;
}
}
if( min != i )
{
StudentType temp = student[i];
student[i] = student[min];
student[min] = temp;
}
}
}
答案 1 :(得分:0)
从你给我的代码中改变一个不平等的标志并得到它!
void SortStudentsByName(StudentType student[], int numStudents)
{
int startScan,
minIndex;
for (startScan = 0; startScan < (numStudents-1); startScan++)
{
minIndex = startScan;
for ( int index = startScan; index < numStudents; index++)
{
if( student[index].studentName < student[minIndex].studentName)
minIndex = index;
}
if(minIndex!=startScan)
{
StudentType temp = student[minIndex];
student[minIndex] = student[startScan];
student[startScan] = temp;
}
}
cout << endl;
cout << "List of Students sorted Alphabetically "<< endl;
DisplayAllStudents(student, numStudents);
}
void SortStudentsByScore(StudentType student[], int numStudents)
{
int startScan,
minIndex;
for (startScan = 0; startScan < (numStudents-1); startScan++)
{
minIndex = startScan;
for ( int index = startScan; index < numStudents; index++)
{
if( student[index].testScore>student[minIndex].testScore)
minIndex = index;
}
if(minIndex!=startScan)
{
StudentType temp = student[minIndex];
student[minIndex] = student[startScan];
student[startScan] = temp;
}
}
cout <<"List of Students sorted by Score from Highest to Lowest" << endl;
DisplayAllStudents(student, numStudents);
}