字典序列:
在字典序中蘊含着一個點,就是大小的問題,誰先出現,誰後出現的問題。譬如a<b<c,出現順序就是a,b,c。
本題中字元集是所有大小寫字母,而題目中規定的誰大誰小已經不是按ascii碼排了,而是A<a<B<b<C<c……,那麼不管在排序的時候還是調用next_permutation中我們都需要指明cmp這個比較大小的函數。
1:sort(data, data+length, cmp)
2:next_permutation(data, data+length, cmp)
注意cmp函數說簡單點就是指明什麼叫“小于”的關系。
主要是next_permutation函數自定義排序的簡單例子,與sort函數排序一樣
題目連結:poj.1256題
#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
bool cmp( char a, char b)
{
if(a <= 'Z' && a >= 'A' && b <= 'Z' && b >= 'A')
return a < b;
if(a <= 'z' && a >= 'a' && b <= 'z' && b >= 'a')
return a < b;
if(a <= 'Z' && a >= 'A' && b <= 'z' && b >= 'a')
return a + 32 <= b;
if(a<='z' && a >='a' && b <= 'Z' && b >= 'A')
return a < (b + 32);
}
int main()
{
int n;
cin>>n;
while(n--)
{
char aa[120];
cin>>aa;
int a=strlen(aa);
sort(aa,aa+a,cmp);
cout<<aa<<endl;
while(next_permutation(aa,aa+a,cmp))
{
cout<<aa<<endl;
}
}
return 0;
}