能解释一下这个C语言小程序的其中一句吗?

来源:百度知道 编辑:UC知道 时间:2024/05/09 14:18:36
我“for(j=half-1,k=strl-1;j>=0;j--,k--){ temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp;}”这一句看不懂,请详细解释一下这一句好吗?谢谢!

函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。
例如:位置 0 1 2 3 4 5 6 7 8
源字符串 d c b a h g f e
4 3 2 1 9 8 7 6 5
则处理后字符串 h g f e a b c d
8 7 6 5 9 1 2 3 4
答案是:
void jsSort()
{ int i,j,k,strl,half;
char temp;
for(i=0;i<20;i++)
{ strl=strlen(xx[i]);
half=strl/2;
for(j=0;j<half-1;j++)
for(k=j+1;k<half;k++)
if(xx[i][j]>xx[i][k])
{ temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp;}
for(j=half-1,k=strl-1;j>=0;j--,k--)
{ temp=xx[i][

for(i=0;i<20;i++)
{
strl=strlen(xx[i]);/*取得一行的字符串*/
half=strl/2; /*以half把xx[i]分成2半*/

for(j=0;j<half-1;j++)
for(k=j+1;k<half;k++)
if(xx[i][j]>xx[i][k])
{ temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp;}
/*以上对左半冒泡排序*/
/*以下将左半与右半对调*/
for(j=half-1,k=strl-1;j>=0;j--,k--)
{ temp=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=temp;}
/*交换语句:j指向左半最后一个元素,k指向右半最后一个元素,循环对换*/
}

temp=a;a=b;b=temp;
这样的形式就是交换a,b的值。

那不是定义数组的吗![i][k]