结构数组中按字母顺序排序的问题气泡
Trouble bubble sorting alphabetically in struct array
当尝试对存储在结构数组中的库存进行冒泡排序时,我在编译以下代码时遇到了两个不同的错误:
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))
"no matching function" 消息消失但被新消息取代:没有从 'string'(又名 'basic_string, allocator >')到 'int' 的可行转换。
最后,我收到一条关于 if 语句正文中语句的一致错误消息,指出 no viable overloaded '=' in temp = list[count]
and list[count + 1] = temp
.
最后一个细节:列表是声明为结构数据类型的数组。我做错了什么?
tolower
适用于单个字符,而不适用于字符串。查看 How to convert std::string to lower case?
- 您正在尝试将
Book
分配给 string
(反之亦然)。更改 temp
. 的类型
我认为你是 C++ 的新手,首先,正如 Carl Norum 提到的,tolower() 适用于字符,而不是字符串。
其次,卡尔关于 temp 是一个字符串(它应该是一本书)是正确的,但是,还有另一个大问题,如果你打算这样做,你正在复制 "Book" class就这样根据 class 的大小,这在计算上可能很困难。如果您必须多次 "sort" 一个数组,我建议使用一个指针数组来加速交换函数。
最后,冒泡排序很糟糕,不要使用它。如果您需要一个始终排序的集合,请使用二叉搜索树或哈希。如果您必须对数组进行排序,"default" 选项是 Quicksort,它在网上有大量资源,所以我不打算 post 如何进行排序。
当尝试对存储在结构数组中的库存进行冒泡排序时,我在编译以下代码时遇到了两个不同的错误:
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))
"no matching function" 消息消失但被新消息取代:没有从 'string'(又名 'basic_string, allocator >')到 'int' 的可行转换。
最后,我收到一条关于 if 语句正文中语句的一致错误消息,指出 no viable overloaded '=' in temp = list[count]
and list[count + 1] = temp
.
最后一个细节:列表是声明为结构数据类型的数组。我做错了什么?
tolower
适用于单个字符,而不适用于字符串。查看 How to convert std::string to lower case?- 您正在尝试将
Book
分配给string
(反之亦然)。更改temp
. 的类型
我认为你是 C++ 的新手,首先,正如 Carl Norum 提到的,tolower() 适用于字符,而不是字符串。
其次,卡尔关于 temp 是一个字符串(它应该是一本书)是正确的,但是,还有另一个大问题,如果你打算这样做,你正在复制 "Book" class就这样根据 class 的大小,这在计算上可能很困难。如果您必须多次 "sort" 一个数组,我建议使用一个指针数组来加速交换函数。
最后,冒泡排序很糟糕,不要使用它。如果您需要一个始终排序的集合,请使用二叉搜索树或哈希。如果您必须对数组进行排序,"default" 选项是 Quicksort,它在网上有大量资源,所以我不打算 post 如何进行排序。