描述
一个字符串,存放在一个数组中,编程序将其改造之后输出:
(1)将S的所有第偶数个字符按照从大到小的次序放在S的后半部分;
(2)将S的所有第奇数个字符按照从小到大的次序放在S的前半部分;
格式
输入格式
输入一个字符串
字符串长度小于15
输出格式
输出改造后的字符串
样例
样例输入
ABCDEFGHIJKL
样例输出
ACEGIKLJHFDB
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char buf[200],s1[100],s2[100];
int i=0,j=0,k=0;
int p,q;
char ch;
gets(buf);//读取一行字符串
while (buf[i])
{
if(i%2==0)
s1[j++] = buf[i]; //奇数位
else
s2[k++] = buf[i]; //偶数位
i++;
}
s1[j] = 0;
s2[k] = 0;
//偶数位从大到小排序
for (p=0;p<k-1;p++)
{
for (q=0;q<k-1-p;q++)
{
if(s2[q] < s2[q+1])
{
ch = s2[q];
s2[q]=s2[q+1];
s2[q+1]=ch;
}
}
}
//奇数位从小到大排序
for (p=0;p<j-1;p++)
{
for (q=0;q<j-1-p;q++)
{
if(s1[q] > s1[q+1])
{
ch = s1[q];
s1[q]=s1[q+1];
s1[q+1]=ch;
}
}
}
memset(buf,0,200);
strcpy(buf,s1);
strcat(buf,s2);
printf("%s",buf);
return 0;
}
思路:
定义3个数组,把数组的奇数部分,偶数部分分别放在2个数组,排好序后再返回原来的数组。
#include <stdio.h>
//从小到大排序
void sort1(char* p,int n)
{
int i,j;
char ch;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(*(p+j) > *(p+j+1))
{
ch = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = ch;
}
}
}
}
//从大到小排序
void sort2(char* p,int n)
{
int i,j;
char ch;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(*(p+j) < *(p+j+1))
{
ch = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = ch;
}
}
}
}
int main()
{
char a[30]={'\0'};
char b1[15]={'\0'};
char b2[15]={'\0'};
int i,cnt = 0,cnt1=0,cnt2=0;
gets(a);
while(a[cnt]!='\0'){
if(cnt % 2==0)
b1[cnt1++]=a[cnt];
else
b2[cnt2++]=a[cnt];
cnt++;
}
sort2(b1,cnt1);
sort1(b2,cnt2);
for(i=0;i<cnt1;i++){
a[i] = b1[i];
}
for(i=cnt1;i<cnt1+cnt2;i++){
a[i] = b2[i-cnt1];
}
printf("%s",a);
return 0;
}