按条件编程

来源:百度知道 编辑:UC知道 时间:2024/06/10 04:19:39
按条件编程
字符串数组a存放着10个字符串,请以行为单位对字符串按给定的条件进行排序,排序后的结果仍
按行重新存入字符串数组a中。
条件:从字符串中间一分为二,左边部分按字符的ascii值升序排序,排序后左边部分与右边部分进行
交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。
例如:源字符串:d c b a h g f e
处理后的字符串:h g f e a b c d
#include"stdio.h"
#include"string.h"
char a[8][30]={"kgalle","jkaklpe","hlvzcbm","hq","hqpamnem","bjk","kke","jjzj"};
void main()
{
int i,j,k,str,half;
char t,r;
for(i=0;i<8;i++)
{
str=strlen(a[i]);
half=str/2;
for(j=0;j<half-1;j++)
for(k=j+1;k<half;k++)
if(a[i][j]>a[i][k])
{
t=a[i][j];
a[i][j]=a[i][k];
a[i][k]=t;
}
}
for(j=half-1,k=str-1;j>=0;j--,k--)
{
r=a[i][j];
a[i][j]=a[i][k];
a[i][k]=r;
}
for(i=0;i<8;i++)
printf("%-10s",a[i]);
}

你的for(j=half-1,k=str-1;j>=0;j--,k--)位置没放对,要放在:
for(i=0;i<8;i++)
{
str=strlen(a[i]);
half=str/2;
for(j=0;j<half-1;j++)
for(k=j+1;k<half;k++)
if(a[i][j]>a[i][k])
{
t=a[i][j];
a[i][j]=a[i][k];
a[i][k]=t;
}
for(j=half-1,k=str-1;j>=0;j--,k--)//要放在这里,而不是后面
{
r=a[i][j];
a[i][j]=a[i][k];
a[i][k]=r;
}
}