在网上看了一下,但是还没有找到任何与此相关的信息。 我是一个C ++入门课程,并且有一个处理对象数组的项目。对象(称为媒体)具有名称和评级。我有三个不同的媒体对象放入媒体对象数组。我需要找到一种方法来按名称对它们进行排序。我获得了用于c-strings的选择排序的代码,但是还没有能够弄清楚究竟如何处理它以将其改为处理媒体对象。这是我对c-strings的选择排序。
void selectsort(char str[][20], int N)
{
int pass, j, min;
char temp[20];
for (pass = 0; pass <= N - 2; pass++) // passes
{
min = pass;
for (j = pass + 1; j < N; j++) // in each pass
if (strcmp(str[min], str[j]) > 0)
min = j;
strcpy(temp, str[min]);
strcpy(str[min], str[pass]);
strcpy(str[pass], temp);
}
}
我已经通过重载&lt;去掉了strcmp与
int media::operator<(media med)
{
return strcmp(mname, med.mname);
}
和strcpy by overloading = with
void media::operator=(media med)
{
strcpy(mname, med.mname);
}
我相信这会返回相同的结果,是吗?
所以这是我的代码到目前为止(我只是在不了解如何做到这一点)。
void selsort(media mry[], int n) // mry[] is the object array, n is the
// number of objects in the array
{
int pass, j, min;
media temp[1];
for (pass = 0; pass <= n - 2; pass++) // passes
{
min = pass;
for (j = pass + 1; j < n; j++) // in each pass
if ((mry[min] < mry[j]) < 0)
min = j;
temp = mry[min];
mry[min] = mry[pass];
temp = mry[min];
}
}
我知道这段代码存在很多缺陷。临时比较不起作用,当我试图使用* temp或temp [0](在这里尝试太阳下的所有东西)时,我得到了损坏的数据错误。我似乎无法解决这个问题。我总是在理解各种各样的问题上挣扎,这只会增加对伤害的侮辱。 (另请注意,某些符号可能不正确,但这是我在本课程中教授的内容以及此教授要求我们编写代码的内容)
感谢您的帮助!
答案 0 :(得分:0)
您的代码有两个问题:
media temp[1];
为什么您希望用于交换的临时媒体存储是1的数组?temp = mry[min]; mry[min] = mry[pass]; temp = mry[min];
看到有什么不对吗?以下是调整后的功能,BTW工作正常:
void selsort(media mry[], int n) // mry[] is the object array, n is the
// number of objects in the array
{
int pass, j, min;
media temp;
for (pass = 0; pass <= n - 2; pass++) // passes
{
min = pass;
for (j = pass + 1; j < n; j++) // in each pass
if ((mry[min] < mry[j]) < 0)
min = j;
temp = mry[min];
mry[min] = mry[pass];
mry[pass] = temp;
}
}