Хорошо, я понятия не имею, что здесь делать:
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++ запрещает назначение массивов
Там явно больше кода, но я просто включил то, что он должен делать с ошибкой. Я просто хочу сортировать имена продукта по коду. Итак, что я могу здесь сделать?
Это в C или в C++?
В C вы должны использовать strcmp (3) для сравнения строк и strcpy (3) для их копирования. Будьте очень осторожны с переполнением буфера (возможно, используйте strncmp
и strncpy
т.д.). Убедитесь, что все ваши строки завершены нулями. Используйте qsort (3) для сортировки.
В C++ вы должны использовать std::string
которая знает о <
; вы можете использовать std :: sort для сортировки. И если вы используете упорядоченные контейнеры, такие как std :: set или std :: map, они будут упорядочены по построению.
Использовать strcpy для назначения массивов char
strcpy(tempchar, productos[z].nombre);
strcpy(productos[z].nombre, productos[z+1].nombre);
strcpy(productos[z+1].nombre, tempchar);
есть другой способ
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;
}
}
char *tempchar = (char*)malloc(sizeof(char) * 30);
и затем tempchar = productos[z].nombre;
При сортировке массива структур обычно вы хотите поменять всю структуру, а не только один член. К счастью для вас, оператор присваивания работает с структурами, даже если они содержат массивы. Таким образом, ваш алгоритм сортировки будет менее глючным, если вы это сделаете:
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
memcpy()
. Если вы хотите, чтобы переменная ссылалась на тот же массив, используйте указатель.