恩,一道规律题。
对于一个字符串,先从后往前找,找到一个字母比他后面的那么字母小的,这个字母就应该替换掉。
再从后往前找,如果一个字母比被替换掉的字符大,那么就交换这两个字母。
输出的时候先按顺序输出被替换掉字母前的字符。
然后逆序输出之后的字符。
#include<stdio.h>
#include<string.h>
int main()
{int i,n,j;char str[100],ipos;while(gets(str)&&(str[0]!='#')){n=strlen(str);if(n==1){printf("No Successor\n");continue;}i=n-2;while(i!=-1&&str[i]>=str[i+1])i--;if(i==-1){printf("No Successor\n");continue;}j=n-1;while(str[j]<=str[i])j--;ipos=str[i];str[i]=str[j];str[j]=ipos;for(j=0;j<=i;j++)printf("%c",str[j]);for(j=n-1;j>i;j--)printf("%c",str[j]);printf("\n");}return 0;
}