当前位置: 代码迷 >> C语言 >> 新手想学好C,求解,谢谢!
  详细解决方案

新手想学好C,求解,谢谢!

热度:117   发布时间:2008-04-14 00:55:00.0
新手想学好C,求解,谢谢!
编写函数,将字符串a中下标值为偶数的元素由小到大排序,其他元素不变。
函数原型如下:  void sort(char *a);
搜索更多相关的解决方案: 求解  函数  标值  元素  求解  函数  标值  元素  

----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <string.h>
#define MAX 50
/*
@功能:定义一个函数,其功能是“将字符串a中下标值为偶数的元素由小到大排序,其他元素不变“
@参数:指向要排序的字符串的指针
@返回值:无
*/
void sort(char *a)
{
    int len = strlen(a), i, j;
    char c;
    for (i = 0; i < len; i += 2)   //这个地方应该是 i < len - 2; 否则数组会越界的。
    {
        for (j = i + 2; j < len; j += 2)
        {
            if (*(a + i) > *(a + j))
            {
                c = *(a + i);
                *(a + i) = *(a + j);
                *(a + j) = c;
            }
        }
    }
}

/*
@功能:主函数,调用sort(char *a)对输入的字符串进行排序
*/
int main(void)
{
    char c[MAX];
    printf("Please input a string with max length %d:\n", MAX);
    scanf("%s", c);
    if (strlen(c) > 50)
    {
        printf("The string that you input is too long!");        
        exit(0);
    }
    sort(c);
    printf("After sort:\n");
    puts(c);
    return 0;
}

[[it] 本帖最后由 mqh21364 于 2008-4-14 15:21 编辑 [/it]]
----------------解决方案--------------------------------------------------------
二楼的回答的有错吧。。。。
会越界的
void sort(char *a)
{
    int len = strlen(a), i, j;
    char c;
    for (i = 0; i < len-2; i += 2)
    {
        for (j = i + 2; j < len; j += 2)
        {
            if (*(a + i) > *(a + j))
            {
                c = *(a + i);
                *(a + i) = *(a + j);
                *(a + j) = c;
            }
        }
    }
}
----------------解决方案--------------------------------------------------------
哦,不好意思,是会越界的,谢谢楼上的!!
----------------解决方案--------------------------------------------------------
谢谢哦
----------------解决方案--------------------------------------------------------
  相关解决方案