恩,一道规律题。
对于一个字符串,先从后往前找,找到一个字母比他后面的那么字母小的,这个字母就应该替换掉。
再从后往前找,如果一个字母比被替换掉的字符大,那么就交换这两个字母。
输出的时候先按顺序输出被替换掉字母前的字符。
然后逆序输出之后的字符。
#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;
}