問題:
有一個只含大小寫字母的字符串,給出所有該字符串的排列,以字典順序輸出。其中 '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));
}
}