问一个C语言题,谢谢!!

这是题:输入一个字符串,找出其中ASCII码值最大的字符,将其移放在第一个位置上,将该字符前的原字符向后顺序移动。例如输入字符串:ABCDeFGH, 调整后的字符串为eABCDFGH。
这是我编的程序。
main()
{
char x[100],max;
int i,j;
gets(x);
max==x[0];
for(i=1;i<strlen(x);i++)
{
scanf("%c",&x[i]);
if(x[i]>max)max==x[i];
x[0]=x[i];
for(j=1;j<=i;j++)
x[j+1]=x[j];
}
puts(x);
getch();
}
求高手指出错误,谢谢,非常感谢!!

main()
{
char x[100],max;
int i,j;
gets(x);
max==x[0];//赋值用一个等号
for(i=1;i<strlen(x);i++)
{
scanf("%c",&x[i]);//这句话没用吧,不需要从外面接收字符了
if(x[i]>max)max==x[i];//赋值用单等号,已经找到最大值得字符了应该跳出循环
x[0]=x[i];
for(j=1;j<=i;j++)//不能正序赋值,这样会覆盖掉的
x[j+1]=x[j];
}
puts(x);
getch();
}追问

能给下你的正确程序吗?谢谢!

追答

修改程序如下:
main()
{
char x[100],max;
int i,j;
gets(x);
max=x[0];
for(i=1;imax)
{
max=x[i];
break;
}
}
for(j=i;j>0;j--)
x[j]=x[j-1];
x[0]=max;
puts(x);
getch();
}

追问

好像不对啊,貌似是错的......

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-15
你不能分两次处理么?
两个for循环就可以,第一个for找出ASCII最大的,并记住下标位置 p ;
第二个for循环从(int i=p;i>0;--i) x[i]=x[i-1];
具体程序现在应该可以实现了吧?
还有scanf("%c",&x[i]);在你的程序里都是多余的。另外写一遍这个程序吧。
第2个回答  2012-06-15
/*输入一个字符串,找出其中ASCII码值最大的字符,将其移放在第一个位置上,将该字符前的原字符向后顺序移动*/
int main(void)
{

char x[100];
int i,j;
int temp1,temp2,max;
gets(x);

max=x[0];
for(i=1;i<strlen(x);i++)
if(x[i]>max)
{ max=x[i];
j=i;
}
if(max!=x[0])
{
temp1=x[0];
x[0]=max;
for(i=1;i<=j;i++)
{
temp2=x[i];
x[i]=temp1;
temp1=temp2;
}

}
printf("\n");
puts(x);

return 0;
}