1

我正在尝试对一个 10X15 的字符数组进行排序,其中每一行都是一个单词。我的目标是按降序对它进行排序,从顶部的最大值单词到数组 [第 0 行] [第 0 列到第 14 列] 位置,以及底部数组 [第 9 行] [第 0 列的最小值通过 14]。每一行都是一个单词(是的,它们看起来不像单词,但这是为了测试程序的排序能力)。

澄清一下: 我需要做的是......考虑到每一行都是一个完整的单词,我需要从顶部的最高值单词和底部的最低值单词对行进行排序。

编辑:

现在一切正常。对于任何有类似问题的人,请查看下面的评论,有几个很棒的解决方案,我只是选择了一个我创建自己的排序函数来了解更多关于排序的解决方案。并感谢大家帮助我!:)

4

3 回答 3

2

您正在使用 c++,因此请退出使用数组并从 stl 类型开始:

将每一行转换为字符串:

string tempString
for (int i = 0; i < rowSize; ++i) {
    tempString.pushBack(array[foreachrow][i])
}

将它们添加到向量中

std::vector<std::string> sorter;
sorter.push_back(tempString);

对每一行都这样做。

std::vector<std::string> sorter;
for each row {
    for each coloumn {
        the string thing

    }
    push back the string
}

然后对向量进行排序并将向量std::sort写回数组(如果你必须但不要因为数组很烂)

于 2013-02-08T01:01:43.490 回答
2

像往常一样,您需要qsort

void qsort( const void *ptr, size_t count, size_t size,
            int (*comp)(const void *, const void *) );

这需要一个指向您的起始地址的 void 指针、要排序的元素数量、每个元素的大小以及一个比较函数。

你可以这样称呼它:

qsort( array, ROWS, COLS, compare_word );

您将 compare_word 定义为反向排序的位置:

int compare_word( const void* a, const void* b )
{
    return strncmp( b, a, COLS );
}

现在,鉴于每个单词的长度为 15 个字符,因此可能需要处理填充。我不知道数组将被打包为 10 x 15 而不是 10 x 16。但如果你怀疑是这样,你可以(&array[1][0] - &array[0][0])作为元素大小而不是COLS.

如果您不允许使用qsort并且必须编写自己的排序算法,请执行一些简单的操作,例如选择排序。您可以使用strncmp来测试字符串。查找函数(谷歌很容易,或者如果你使用 Linux,man 3 strncmp)。要交换字符,您可以使用一个临时char长度数组,COLS然后调用 3 次memcpy来交换单词。

于 2013-02-08T02:01:59.600 回答
2

您的新代码使用stringand的问题vector是一个简单的错字:

sorter[count] = array[count+1];应该sorter[count] = sorter[count+1];

于 2013-02-08T03:19:00.330 回答