0

わかりました、ここで何をすべきかわかりません:

struct
{
       char nombre[30];
       int codigo;     
 }productos[10];

int z = 0;
char tempchar[30]; 

for (z=0; z<9; z++)  {
           if (productos[z].codigo>productos[z+1].codigo) {           
              tempchar = productos[z].nombre;
              productos[z].nombre = productos[z+1].nombre;                  
              productos[z+1].nombre = tempchar;
           }
     }

次のエラー メッセージが表示されます: ISO C++ は配列の代入を禁止しています

明らかにもっと多くのコードがありますが、エラーと関係があるものだけを含めました。製品の名前をコードで並べ替えたいだけです。それで、私はここで何ができますか?

4

4 に答える 4

4

それは C ですか、それとも C++ ですか?

C では、strcmp(3)を使用して文字列を比較し、strcpy(3)を使用してそれらをコピーする必要があります。バッファ オーバーフローには十分注意してください(おそらく使用strncmpなどstrncpy)。すべての文字列が null で終了していることを確認してください。ソートにはqsort(3)を使用します。

C++ では、std::stringwhich know aboutを使用する必要があり<ます。その後、 std::sortを使用して並べ替えることができます。また、 std::setstd::mapなどの順序付けされたコンテナーを使用する場合、それらは構築によって順序付けられます。

于 2013-11-02T22:04:44.670 に答える
2

strcpyを使用してchar配列を割り当てる

strcpy(tempchar, productos[z].nombre);
strcpy(productos[z].nombre, productos[z+1].nombre);
strcpy(productos[z+1].nombre, tempchar);
于 2013-11-02T22:04:54.437 に答える
0

構造体の配列を並べ替えるときは、通常、単一のメンバーだけでなく、構造体全体を交換する必要があります。幸いなことに、配列が含まれている場合でも、代入演算子は構造体で機能します。したがって、これを行うと、ソートアルゴリズムのバグが少なくなります。

temp = productos[z]; 
productos[z] = productos[z+1];
productos[z+1] = temp;

(宣言の仕方tempは読者の課題として残しています)

または、C++ の使用が許可されている場合は、次のことができます。

std::swap(productos[z],productos[z+1]);

覚えておいてください、あなたのソートアルゴリズムはまだバグがあります。実装できる非常に簡単なソートアルゴリズムについては、「バブルソート」を検索する必要があります。qsortまたは、これが演習でない場合は、またはのような既存の実装を使用してください。std::sort

于 2013-11-03T00:37:33.527 に答える