输入一个字符串,然后一分为二,左边部分按ASCII的值降序排列,右边部分按ASCII的值升序排列,如果字符串长度为奇数,则中间一个数不参与排序,扔置于原位置。
例如:
输入1234dcba
输出4321abcd
然而我写代码输出的结果是乱码..如图
以下是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void down_sort(char *string, int mid); //函数声明:分别降序排列,升序排列,输出
void up_sort(char *string, int mid);
int putout(char *string);
int main()
{
char str[81];
int middle = 0, middle_l, middle_r; //定义中点,字符串分两部分,middle_l为左半部分所用中点,middle_r为右半部分所用中点
gets(str);
if (strlen(str) % 2 != 0)
{
middle = (strlen(str) + 1) / 2; //对中点取值
middle_l = middle - 1; //对middle_l取值
middle_r = middle + 1; //对middle_r取值
}
else
{
middle = strlen(str) / 2; //同上
middle_l = middle;
middle_r = middle + 1;
}
down_sort(str, middle_l); //对左半部分降序排列
up_sort(str, middle_r); //对右半部分降序排列
putout(str); //输出结果
system("pause");
return 0;
}
void down_sort(char *string, int mid) //冒泡降序排列
{
int end, num, tmp;
for (end = 0; end < (mid - 1); end++)
{
for (num = 0; num < mid - 1 - end; num++)
{
if (string[num] < string[num + 1])
{
tmp = string[num];
string[num] = string[num + 1];
string[num + 1] = tmp;
}
}
}
}
void up_sort(char *string, int mid) //冒泡降序排列
{
int end, middle, num, tmp;
for (end = mid; end < strlen(string); end++)
{
for (num = mid; num < strlen(string) - 1 - end; num++)
{
if (string[num] > string[num + 1])
{
tmp = string[num];
string[num] = string[num + 1];
string[num + 1] = tmp;
}
}
}
}
int putout(char *string)
{
int i;
for (i = 0; i < strlen(string); i++)
{
printf("%c", string + i);
}
printf("\n");
return 0;
}