c ++中的字符串排序也没有在第5个元素处正确排序[关闭]

Posted

技术标签:

【中文标题】c ++中的字符串排序也没有在第5个元素处正确排序[关闭]【英文标题】:string sort in c++ nor sorted properly at 5th element [closed] 【发布时间】:2017-10-15 19:12:56 【问题描述】:

请看下面的程序,排序输出不正确。

string pru[] =  "ruthvi$p", "uthvi$pr", "thvi$pru", "hvi$prut",    "vi$pruth", "i$pruthv", "$pruthvi", "pruthvi$" ;

sort(pru, pru + 8, cmp);
for(int i = 0; i < 8; i++)
    cout << pru[i] << " ";

输出是

$pruthvi hvi$prut i$pruthv pruthvi$ thvi$pru ruthvi$p uthvi$pr vi$pruth 

错误“thvi$pru”在“ruthvi$p”之前

【问题讨论】:

显示cmp 的实现,我猜我们会谈谈。 错误不在您向我们展示的代码中。它必须在您没有向我们展示的代码中。大概您已经在某处完成了using ::std;,因此您对可能来自 C++ 标准库的内容的所有非限定引用实际上都是指 C++ 标准库。鉴于此,错误必须在您的 cmp 函数中。意识到每天都有成千上万的人在任何给定平台上使用 C++ 标准库。你没有做任何奇怪或不寻常的事情。因此,您在那里发现问题的可能性很小。 谢谢我在我的 cmp() 函数中发现了问题。是的,我不是说 libc 的 sort() impl 有问题,应该是我的调用或实现有问题。 【参考方案1】:

不清楚cmp是如何定义的,但你可以使用这段代码,你会得到预期的结果。:)

#include <string>
#include <iterator>
#include <algorithm>

//...

std::string pru[] = 
 
    "ruthvi$p", 
    "uthvi$pr", 
    "thvi$pru", 
    "hvi$prut",    
    "vi$pruth", 
    "i$pruthv", 
    "$pruthvi", 
    "pruthvi$" 
;

std::sort(std::begin(pru), std::end(pru));

for (const auto &s : pru) std::cout << s << std::endl;

输出是

$pruthvi
hvi$prut
i$pruthv
pruthvi$
ruthvi$p
thvi$pru
uthvi$pr
vi$pruth

【讨论】:

我的 cmp() 函数如下 bool cmp(string a, string b) if(a.compare(b) > 0) return false;否则返回真;

以上是关于c ++中的字符串排序也没有在第5个元素处正确排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中怎样让一个有10个元素的数组输出5个元素后换行后再输出另外五个函数

排序算法之冒泡排序

比较计数排序与分布计数排序

比较计数排序与分布计数排序

C++ 快速排序实现,没有正确的输出

如何对2个LIST中的元素进行比较