Устранение неполадок при сортировке по алфавиту в массиве struct

При попытке пузырьковой сортировки инвентаря, хранящегося в массиве struct, я получаю две разные ошибки при компиляции кода ниже:

void SORT_INVENTORY(Books* list, int max, int position)
{
bool swap;
string temp;

do
{
swap = false;
for (int count = 0 ; count < (position - 1) ; count++)
{
if ( tolower(list[count].Title) > tolower(list[count + 1].Title))
{
temp = list[count];
list[count] = list[count + 1];
list[count + 1] = temp;
swap = true;
}
}
} while (swap);

Я хочу использовать tolower для сравнения элемента Title двух структурных массивов. Тем не менее, компилятор не позволит мне запустить программу, потому что он говорит, что нет соответствующей функции для вызова tolower.

Когда я переключаю выражение if на это:

if ( ::tolower(list[count].Title) > ::tolower(list[count + 1].Title))

Сообщение «Нет подходящей функции» исчезает, но заменяется новым: нет жизнеспособного преобразования из ‘string’ (он же basic_string, allocator> ‘) в’ int ‘.

Наконец, я получаю непротиворечивое сообщение об ошибке, касающееся статистики в теле оператора if, заявляя нет жизнеспособных перегруженных ‘=’ в temp = list[count] а также list[count + 1] = temp,

Одна последняя деталь: список — это массив, объявленный как тип данных struct. Что я делаю неправильно?

1

Решение

  1. tolower работает с одним символом, а не строкой. Проверять, выписываться Как преобразовать std :: string в нижний регистр?
  2. Вы пытаетесь назначить Book к string (и наоборот). Изменить тип temp,
1

Другие решения

Я так понимаю, вы новичок в C ++, во-первых, как упоминал Карл Норум, tolower () работает с символами, а не строками.

Во-вторых, Карл прав в том, что temp — это строка (это должна быть книга), но есть еще одна большая проблема: вы копируете класс «Book», если планируете делать это таким образом. В зависимости от размера класса это может быть сложно в вычислительном отношении. Если вам нужно «отсортировать» массив несколько раз, я бы предложил использовать массив указателей для ускорения функции подкачки.

Наконец, пузырьковая сортировка ужасна, не используйте ее. Если вам нужен набор, который всегда сортируется, используйте двоичное дерево поиска или хэш. Если вам нужно отсортировать массив, опцией по умолчанию будет Quicksort, которая имеет множество источников в Интернете, поэтому я не собираюсь публиковать, как это сделать.

0

По вопросам рекламы [email protected]