好的,我不知道该怎么做:
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 ++禁止分配数组
显然有更多的代码,但我只是包含了与错误有关的内容。 我只想按代码对产品名称进行排序。那么,我能在这做什么呢?
答案 0 :(得分:4)
是C还是C ++?
在C语言中,您应该使用strcmp(3)来比较字符串,并使用strcpy(3)来复制字符串。要非常小心buffer overflow(也许使用strncmp
和strncpy
等......)。确保所有字符串都以空值终止。使用qsort(3)进行排序。
在C ++中,您应该使用知道<
的{{3}};然后,您可以使用std::string
对它们进行排序。如果你使用像std::sort或std::set这样的有序容器,它们将按照构造进行排序。
答案 1 :(得分:2)
使用strcpy分配char
数组
strcpy(tempchar, productos[z].nombre);
strcpy(productos[z].nombre, productos[z+1].nombre);
strcpy(productos[z+1].nombre, tempchar);
答案 2 :(得分:0)
排序结构数组时,通常需要交换整个结构,而不只是单个成员。幸运的是,即使它们包含数组,assignement运算符也可以处理结构。因此,如果您执行此操作,您的排序算法将减少错误:
temp = productos[z];
productos[z] = productos[z+1];
productos[z+1] = temp;
(如何声明temp
留给读者练习
或者,如果允许使用c ++,则可以执行
std::swap(productos[z],productos[z+1]);
请记住,您的排序算法仍然存在问题。您应该查找“bubblesort”以获得可以实现的简单排序算法。或者甚至更好,如果这不是练习,请使用现有的实施,例如qsort
或std::sort
答案 3 :(得分: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;
}
}