在字符串str中找出最大的字符,将在该字符前的所有字符往后顺序移动一位,再把最大字符放在字符串的第一个位置上。如“knowledge”变成“wknowledge”。
首先我们需要找出字符串中最大的字符。然后,将在该字符前的所有字符往后移动一位,最后将该字符放在字符串的第一个位置上。例如knowledge变成wknowledge,将最大字符‘w’移动到了第一个位置。
#include <stdio.h>
int main()
{
char max, str[80], *p, *q;
p = str;
//把字符串的长度赋值给p,这样就可以通过p来指向字符串str里的每个字符,来找到最大的字符
gets(p);
//从标准输入中读取字符串str然后遍历字符串的每一个字符,
//找出最大的字符,将其记录在max中,最后将max移到字符串的第一个位置,并输出新字符串
max = *p;
//为了在字符串中找出最大的字符,*p指的是字符串中当前字符的值
//max保存着目前为止看到的最大值
p++;
//下一次循环中指向的字符
while (*p!='\0'){
//为了循环遍历str,直到遇到空字符‘\0’才能够结束循环
if (max<*p){
max=*p; //用途是读取字符串中的最大值
q=p;
//为了使指针q指向字符串str的第一个字符,
//从而可以从头开始遍历str并找到最大字符max
}
p++;
}
p = q;
while (p>&str[0]){
//比较语句,可以保证while语句执行之前,p一定指向最大字符的下一个位置
//检查p是否大于字符数组的第一个字符
*p = *(p-1);
//将p指向的字符赋值为p-1指向的字符即前一个字符,也就是把字符串中的元素往后移动一个位置的意思。
p--;
}
*p = max;
puts(p);
return 0;
}
char max用于存储字符串str中最大值,每次循环都会检查字符串str中的值是否比max大,如果大于max,就更新max的值。
str[80]代表最多可以存储80个字符的字符串
char max是为了读入最大值,str80是限定了字符串的长度,这是因为需要有一个有限的存储空间来存储最大值。
#include<stdio.h>
int main()
{
char str[]="knowledge";
int maxIndex=0;
for(int i=1;str[i]!='\0';i++)
{
if(str[i]>str[maxIndex])
maxIndex=i;
}
char largest=str[maxIndex];
while(maxIndex>0)
{
str[maxIndex]=str[maxIndex-1];
maxIndex--;
}
str[0]=largest;
printf("Result:%s\n",str);
return 0;
}