对二维字符数组进行排序?C++
Sorting a two-dimensional array of characters? C++
我正在尝试对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次来交换单词。
使用string
和vector
的新代码的问题是一个简单的打字错误:
sorter[count] = array[count+1];
应为sorter[count] = sorter[count+1];
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序