我需要对字符串的字符进行排序,并且需要先显示较低的字母。例如,“acDbA”在排序后将变为“abcAD”。
以下代码是我提出的:
bool compare(const char& c1, const char& c2) {
if (c1 >= 'A' && c1 <= 'Z' && c2 >= 'a' && c2 <= 'z') return false;
if (c2 >= 'A' && c2 <= 'Z' && c1 >= 'a' && c1 <= 'z') return true;
return c1<c2;
}
void sortLetters(string &letters) {
sort(letters.begin(), letters.end(), compare);
}
但是在Visual Studio中我得到了:
'sort': no matching overloaded function found
'SortLetters::compare': non-standard syntax; use '&' to create a pointer to member
'void std::sort(_RanIt,_RanIt)': expects 2 arguments - 3 provided
我应该如何创建用于排序字符串的自定义比较函数,我似乎无法通过字符串排序在线查找示例。
答案 0 :(得分:2)
上面的代码在使用自由函数时编译得很好。我是你的情况,你使用的是对象的方法,它不能简单地调用。
您也可以传递一个仿函数对象或一个lambda对象。顺便说一下,由于std :: sort是一个函数模板,因此比较器的确切参数并不重要。唯一重要的是它能够获取两个值并返回可以转换为bool的东西。
答案 1 :(得分:1)
下面的代码有效,只有更改是比较成员函数现在标记为&#34;静态&#34;:
class SortLetters {
public:
static bool compare(const char& c1, const char& c2) {
if (c1 >= 'A' && c1 <= 'Z' && c2 >= 'a' && c2 <= 'z') return false;
if (c2 >= 'A' && c2 <= 'Z' && c1 >= 'a' && c1 <= 'z') return true;
return c1<c2;
}
void sortLetters(string &letters) {
sort(letters.begin(), letters.end(), compare);
}
};