摘要:重复排列,因为输出是把字符串末尾的"/n"输出了.PE了还几次。。FT
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
const int size = 13;
char array[size+1] = {0};
int n = 0;
bool compare(char one, char two)
{
if((one>'Z' && two>'Z') || (one<'a' && two<'a')){
return one < two;
}
if( one < 'a' ){
one = tolower(one);
return one <= two;
}else{
two = tolower(two);
return one < two;
}
}
bool findNext()
{
int i=n-1;
int j=n-1;
for(i=n-2; i>=0; i--){
if(compare(array[i], array[i+1])){
break;
}
}
if(i < 0){
return false;
}
for(; j>i; j--){
if(compare(array[i], array[j])){
break;
}
}
if(j <= i){
return false;
}
swap(array[i], array[j]);
reverse(&array[i+1], &array[n]);
return true;
}
int main()
{
int case_num = 0;
cin >> case_num;
for(int i=1; i<=case_num; i++){
string buf;
cin >> buf;
for(n=0; n<buf.length(); n++){
array[n] = buf[n];
}
array[n] = '/0';
sort(array, array+n, compare);
copy(array, array+n, ostream_iterator<char>(cout));
cout << endl;
while( findNext() ){
copy(array, array+n, ostream_iterator<char>(cout));
cout << endl;
}
}
return 0;
}