在字符串str中找出ASCII码最大的字符,将其放在第一个位置上并将该字符向后顺序移动。为什么是q=q+i;

#include <stdio.h>
/********found********/
void fun(char *p);
{
char max, *q;
int i = 0;
max = p[i];
while (p[i] != 0)
{
if (max < p[i])
{
/********found********/
max = p[i];
p = q+i;
}
i++;
}
while (q > p)
{
*q = *(q-1);
q--;
}
p[0] = max;
}

{
*q=*(q-1);
q--;
}
表示将max之前的串逐个后移一位
在q=p+1时,将p[0]移到了p[1],所以完成移动,之后跳出循环
最后将p[0]赋最大值max即可

你可以试一下,过程没错.答案错了

要说有缺陷就是当有多个相等最大值时,他只能查出第一个并移动
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-03-28
应该是q = p + i;
下面的代码测试通过,你看看。
#include<stdio.h>
#define MAX 15
void main()
{
char *p, *q, max;
char a[MAX] = "i love you";

printf("%s\n", a);
p = q = a;
max = p[0];
while(*p)
{
if(max < *p)
{
max = *p;
q = p;
}
p++;
}
p = a;
while(p < q)
{
*q-- = *(q-1);
}
p[0] = max;
printf("%s\n", a);
}本回答被提问者采纳
第2个回答  2011-02-22
代码里是p = p + i

指针往后移一位,指到下一个字符,继续判断,把最大的付给max,
第3个回答  2020-04-06
应该是q = p + i; 下面的代码测试通过,你看看。 #include<stdio.h> #define MAX 15 void main() { char *p, *q, max; char a[MAX] = "i love you"; printf("%s\n", a); p = q = a;
相似回答