6-7 按要求移动字符 (12 分)
函数Move_str的功能是:在字符串str中找到ASCII码值最大的字符,将该字符放到首位,其余字符顺序后移。函数接口定义:void Move_str ( char *p);其中 p 是用户传入的参数。裁判测试程序样例:#include<stdio.h> void Move_str ( char *p); int main() { char str[80]; gets(str); M
·
函数Move_str的功能是:在字符串str中找到ASCII码值最大的字符,将该字符放到首位,其余字符顺序后移。
函数接口定义:
void Move_str ( char *p);
其中 p 是用户传入的参数。
裁判测试程序样例:
#include<stdio.h> void Move_str ( char *p); int main() { char str[80]; gets(str); Move_str(str); printf("The string after moving:"); puts(str); return 0; } /* 请在这里填写答案 */
输入样例1:
ABCDeFG
输出样例1:
The string after moving:eABCDFG
输入样例2:
ABCDeFGe
输出样例2:
The string after moving:eeABCDFG
void Move_str ( char *p)
{
char max=0;
int len,index=-1;
len=strlen(p);
int i,j;
for(i=0;i<len;i++)
{
if(max<p[i])
{
max=p[i];
index=i;
}//找最大值及其下标
}
for(i=index-1;i>=0;i--)
{
p[i+1]=p[i];//左半部分右移一位
}
p[0]=max;//移至首位
for(i=1;i<len;i++)
{
if(p[i]==max)//若有多个最大值,再次进行循环。
{
for(j=i-1;j>=0;j--)
{
p[j+1]=p[j];
}
p[0]=max;
}
}
}
关键在于如何理解移到首位,如果理解为将剩下的组成一个新的字符串再加上最大的就会感觉复杂。其实真正需要移动的只是最大值之前的字符,后面的不用管。那么在找到最大值之后,将其之前的每一位向后移一位即可 。但是要考虑到一种例子涉及到的特殊情况:最大值有多个的时候,只会移动一个,那么就需要依次判断之后的每一位是否为最大值,若是最大值就再来一个循环,最后将新的最大值移到最前面去。易错点在于对特殊情况的发现以及处理。
更多推荐
已为社区贡献1条内容
所有评论(0)