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个元素处正确排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章