排序二维字符数组? C ++

时间:2013-02-08 00:52:04

标签: c++ arrays sorting

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

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

编辑:

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

3 个答案:

答案 0 :(得分: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对向量进行排序,并将向量写回数组(如果必须但不要因为数组很糟糕)

答案 1 :(得分: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乘15而不是10乘16但是如果你怀疑这样,你可以将(&array[1][0] - &array[0][0])作为元素大小而不是COLS。< / p>

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

答案 2 :(得分:2)

使用stringvector的新代码存在的问题很简单:

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