zcmerlin
zcmerlin
2016-09-03 14:23

C语言,请教字符串排序问题

输入一个字符串,然后一分为二,左边部分按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;
}
  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答

为你推荐