0

選択の並べ替えに問題があります。生徒の名前をアルファベット順に並べ替えようとしています。コンパイルすると、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
4

2 に答える 2

0

これには、クラス std::string からの比較を使用する必要があります。比較に関する情報はこちらをご覧ください。別の問題は、学生を交換していないことです。Selection Sortについては wiki を参照してください。

これはあなたの問題に対する私の実装です。これがうまくいくことを願って、私はそれをテストしていません。

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;
        }
    }
}
于 2013-11-15T07:49:30.830 に答える