2017-11-20 15 views
1

オンラインで検索しましたが、これについて何も見つかりませんでした。 私はC++入門クラスにあり、オブジェクトの配列を扱うプロジェクトを持っています。オブジェクト(メディアと呼ばれる)には名前と評価があります。私は3つの異なるメディアオブジェクトをメディアオブジェクト配列に入れました。私はそれらを名前で並べ替える方法を見つける必要があります。私はc-stringsの選択ソートのコードを与えられましたが、メディアオブジェクトを扱うためにこれを変更するために正確に何をするべきかを理解できませんでした。ここで私の選択したC文字列のソートです。選択オブジェクトの配列を並べ替えます

void selectsort(char str[][20], int N) 
{ 
int pass, j, min; 
char temp[20]; 
for (pass = 0; pass <= N - 2; pass++) // passes 
{ 
min = pass; 
for (j = pass + 1; j < N; j++) // in each pass 
if (strcmp(str[min], str[j]) > 0) 
min = j; 
    strcpy(temp, str[min]); 
    strcpy(str[min], str[pass]); 
    strcpy(str[pass], temp); 
    } 
} 

私は、これはそう、同じ結果を返すだろうと信じてい

void media::operator=(media med) 
    { 
     strcpy(mname, med.mname); 
    } 

と=のオーバーロードによって

int media::operator<(media med) 
    { 
     return strcmp(mname, med.mname); 
    } 

とstrcpyので<をオーバーロードすることにより、strcmpのを取り除く得ていますか?

これまでのところ、私のコードはここにあります(どうやってそれを理解していないのか分かりません)。

void selsort(media mry[], int n) // mry[] is the object array, n is the 
           // number of objects in the array 
{ 
    int pass, j, min; 
    media temp[1]; 
    for (pass = 0; pass <= n - 2; pass++) // passes 
    { 
     min = pass; 
     for (j = pass + 1; j < n; j++) // in each pass 
      if ((mry[min] < mry[j]) < 0) 
       min = j; 
     temp = mry[min]; 
     mry[min] = mry[pass]; 
     temp = mry[min]; 
    } 
} 

このコードには多くの瑕疵があると私は理解します。一時的な比較がうまくいかず、私が* tempやtemp [0]を使って取得しようとすると(ここで太陽の下のすべてを試してみると)、データエラーが壊れてしまいます。私はそれを理解するように見えることはできません。私はいつも種類を理解することに苦労しており、これは傷害に侮辱を加えるだけです。 (一部の表記が正しくない可能性がありますが、これは私がこのクラスで教えたことであり、この教授が私たちがコーディングすることを尋ねるものです)

ありがとうございました!

+1

無関係:代わりに、独自のスワップを書くので、 'のstd :: swap'を検討してください。 – user4581301

+0

ええ、std :: swapを使用する唯一のことは、オブジェクトがどのように動作するかを学習することになっていることです。私の教授は、すべてを記述し、あらかじめ定義されたメソッドを使用しないことを望んでいます。 – CBevs

+0

私はあなたの編集をロールバックしました。なぜなら、解答が解決した問題を取り除くことによって無意味な答えになったからです。しないでください。代わりに別の質問をしてください。 – user4581301

答えて

0

あなたのコードと間違って2つのことがあります。

  1. media temp[1];なぜあなたは1の配列で交換するための一時的なメディアストレージをしたいですか?
  2. スワッピング:temp = mry[min]; mry[min] = mry[pass]; temp = mry[min];何か間違っていますか?ここで

ところで正常に動作し、調整機能、次のとおりです。

void selsort(media mry[], int n) // mry[] is the object array, n is the 
           // number of objects in the array 
{ 
    int pass, j, min; 
    media temp; 
    for (pass = 0; pass <= n - 2; pass++) // passes 
    { 
     min = pass; 
     for (j = pass + 1; j < n; j++) // in each pass 
      if ((mry[min] < mry[j]) < 0) 
       min = j; 
     temp = mry[min]; 
     mry[min] = mry[pass]; 
     mry[pass] = temp; 
    } 
} 
+1

これを助けてくれてありがとう!私は今朝自分のコードを見て、コード内にどれだけの奇妙なエラーがあるかを見て額に叩かれました。私は少し変更する必要がありました(実際にはメディアポインタとされていました)が、あなたの答えはまだ魔法でした。ありがとう! – CBevs

関連する問題