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++ forbids assignment of arrays

显然还有更多代码,但我只是包含了它与错误的关系。我只想按代码对产品名称进行排序。那么,我可以在这里做什么?

4

4 回答 4

4

它是在 C 中还是在 C++ 中?

在 C 语言中,您应该使用strcmp(3)来比较字符串并使用strcpy(3)来复制它们。要非常小心缓冲区溢出(可能使用strncmpstrncpy...)。确保所有字符串都以空字符结尾。使用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

还有另一种方法

struct
{
  char *nombre = (char*)malloc(sizeof(char) * 30);
  int codigo;     
}productos[10];
int z = 0;
char *tempchar = (char*)malloc(sizeof(char) * 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;
       }
 }
于 2013-11-03T02:18:53.493 回答
0

在对结构数组进行排序时,您通常希望交换整个结构,而不仅仅是单个成员。幸运的是,赋值运算符适用于结构,即使它们包含数组。因此,如果您这样做,您的排序算法将更少错误:

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

(如何声明temp留给读者练习)

或者,如果您被允许使用 c++,您可以这样做

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

请记住,您的排序算法仍然有问题。您应该查找“冒泡排序”以获得可以实现的简单排序算法。或者更好的是,如果这不是练习,请使用现有的实现,例如qsortstd::sort

于 2013-11-03T00:37:33.527 回答