【答案】
void jsSort()
{
int i,j,k; /*定义计数器变量*/
int str,half; /*定义存储字符串长度的变量*/
char temp; /*定义数据交换时的暂存变量*/
for(i=0;i<20;i++) /*逐行对数据进行处理*/
{
str=strlen(xx[i]); /*求字符串的长度*/
half=str/2; /*通过变量half将字符串分为左右两部分*/
for(j=0;j<half-1;j++) /*用选择法将左边部分按字符的ASCII值降序
排序*/
来自www.examzz.com 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=str-1;j>=0;j--,k--) /*将左边部分和右边部分的对应字符交换*/
{
temp=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=temp;
}
}
}
【解析】本题考查对二维字符数组的处理。
需要首先求得各行字符串的长度(利用求字符串长度的strlen()函数),然后借助循环结构逐个访问各行中的每一个字符。
在本题中,应先确定各行中字符串的中间位置,之后用选择法先对中间位置以前的字符进行降序排序。接着把中间位置前的一个位置定为初始位置,字符串中的最后一个位置也视为初始位置,使两个位置所对应的字符进行交换,交换过后,这两个位置值(也就是下标值)分别前移,再进行对应位置字符的交换。