如何使用C ++中的自定义比较函数对字符串进行排序?

时间:2017-07-04 20:12:09

标签: c++ string

我需要对字符串的字符进行排序,并且需要先显示较低的字母。例如,“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   

我应该如何创建用于排序字符串的自定义比较函数,我似乎无法通过字符串排序在线查找示例。

2 个答案:

答案 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);
    }
};