POJ1256 (C++ compare函數)

問題:

  有一個只含大小寫字母的字符串,給出所有該字符串的排列,以字典順序輸出。其中 'A'<'a'<'B'<'b'<...<'Z'<'z'。

方法:

  只需調用C++ STL中 next_permutation() 和 sort() 函數,重點在於編寫自定義的compare() 函數。

hint:(compare 函數的編寫方法)

bool cmp(int a, int b){
      a = ....;                      // 處理a
      b = ....;                      // 處理b
      return (condition);    // 若要增序排列,只需將condition填補爲所有可能使a小於b的情況
}

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

bool cmp(char a, char b){
    if(a <= 'Z' && b <= 'Z')
        return a < b;
    else if(a >= 'a' && b >= 'a')
        return a < b;
    else if(a >= 'a' && b <= 'Z')
        return a - 'a' < b - 'A';
    else if(b >= 'a' && a <= 'Z')
        return a - 'A' <= b - 'a';
}

int main(){
    string input;
    int N;
    cin >> N;
    while(N--){
        cin >> input;
        sort(input.begin(), input.end(), cmp);
        do{
            cout << input << endl;
        }while(next_permutation(input.begin(), input.end(), cmp));

    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章