我正在尝试对10X15字符数组进行排序,其中每行都是一个单词。我的目标是按照从顶部的最大值字,在数组[第0行] [第0列到第14列]位置以及最下面的数组[第9行] [第0列]的最小值字的顺序对其进行排序通过14]。每一行都是一个单词(是的,它们看起来不像单词,但它是测试程序的排序功能)。
澄清:我需要做的是......考虑到EACH行是一个完整的单词,我需要对最高值单词位于顶部的行进行排序,最低值的词位于底部。
编辑:
现在一切正常。对于任何有类似问题的人,请看下面的评论,有几个很棒的解决方案,我只是在我创建自己的排序函数的地方,以了解有关排序的更多信息。感谢大家的帮助! :)
答案 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)
使用string
和vector
的新代码存在的问题很简单:
sorter[count] = array[count+1];
应为sorter[count] = sorter[count+1];