对二维字符数组进行排序?C++

Sorting a two-dimensional array of characters? C++

本文关键字:排序 C++ 数组 字符 二维      更新时间:2023-10-16

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

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

编辑:

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

您使用的是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对向量进行排序,并将向量写回数组中(如果必须这样做,但因为数组很糟糕而不这样做)

像往常一样,您需要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

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

使用stringvector的新代码的问题是一个简单的打字错误:

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