字典序(非指针):
#include <stdio.h>
#include <string.h>
#define N 100
char a[N];
void swap(int i,int j){//交换
char ch;
ch=a[i];
a[i]=a[j];
a[j]=ch;
}
void reverse(int start,int end){//逆置
while(start<end){
swap(start,end);
start++;
end--;
}
}
void sort(){//排序
int i,j,n=strlen(a);
for(i=0;i<=strlen(a)-2;i++)
for(j=i+1;j<=strlen(a)-1;j++)
if(a[i]>a[j])
swap(i,j);
}
int permutation(){//以字典序输出所有字符串
int i,j,count=1;
while(1){//从右向左查找第一对相邻的升序元素
i=strlen(a)-1;
if(a[i-1]>a[i]){
i--;
if(i==0)return count;
}j=i-1;
i=strlen(a)-1;
while(a[i]<a[j])
i--;
swap(i,j);
reverse(j+1,strlen(a)-1);
puts(a);
count++;
}
}
int main(){
int n;
gets(a);
if(a[0]==0)return 0;
if(a[1]==0){
puts(a);
return 0;
}sort();
puts(a);
n=permutation();
printf("%d\n",n);
return 0;
}