#include<stdio.h>
#include<string.h>'
int main(){
char a[]="morning",t;
int i,j=0;
for(i=0;i<7;i++)
if(a[j]<a[i])
j=i;
t=a[j];
a[j]=a[7];
a[7]=a[j];
puts(a);
return 0;
}
不理解为什么会输出mo啊 谢谢大家
for(i=0;i<7;i++)
if(a[j]<a[i])
j=i;
这三行获取的j表示字符串中最大字母所在下标,结果应该2
t=a[j];
a[j]=a[7];
a[7]=a[j];
这三行交换a[2]和a[7]的值,由于字符串长6,所以第七位是结束符,所以交换以后a[2]就变成了结束符
puts(a);
打印a遇到结束符停止,此时下标为2的位置是结束符,所以打印前两个字母mo
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "morning", t;
int i, j = 0; // 一开始j=0, a[j]='m'
for (i = 0; i < 7; i++) // 这个循环的意思是找到比m大的字母,循环结束时j==2, a[j]='r'
if (a[j] < a[i])
j = i;
t = a[j]; // 下面是把a[j]与a[7]作交换,注意a[7]='\0'
a[j] = a[7];
a[7] = a[j];
puts(a); // 交换后的字符数组a是"mo\0ningr",输入字符串时遇到第一个'\0'结束,所以输出mo
return 0;
}
比较的是ASCLL码,a[7],换到了a[2]的位置