C字符串排序

排序算法一般都是针对于数字进行排序,那char类型是否能排序呢?
试一下。

#include<stdio.h>
#include <stdlib.h>
void compare(char str[100],int length)
{
    int change=5;
    for(int i=0;i<length;i++)
    {
        for(int j=0;j<length;j++)
        {
            //if(str[i]==str[j])
            //{
            //str[i]='\0';
            //continue;
            //}
            if(str[i]>str[j])
            {
            change=str[j];
            str[j]=str[i];
            str[i]=change;
            }
        }
    }
}

void main()
{
    char a[]="fherweufashjewadfa";
    char b[]="uiorewgfagipobagbi";
    compare(a,sizeof(a));
    compare(b,sizeof(a));
    printf("%s\n",a);
    printf("%s\n",b);
    int d=0;
    scanf("%d",d);
}

排序结果是从大到小排序,而且中间变量也是可以用int类型的,然后进行比较,但是引发了一个问题,我想从小到大排序,然后输出,

#include<stdio.h>
#include <stdlib.h>
void compare(char str[100],int length)
{
    int change=5;
    for(int i=0;i<length;i++)
    {
        for(int j=0;j<length;j++)
        {
            //if(str[i]==str[j])
            //{
            //str[i]='\0';
            //continue;
            //}
            if(str[i]<str[j])
            {
            change=str[j];
            str[j]=str[i];
            str[i]=change;
            }
        }
    }
}

void main()
{
    char a[]="fherweufashjewadfa";
    char b[]="uiorewgfagipobagbi";
    compare(a,sizeof(a));
    compare(b,sizeof(a));
    printf("%s\n",a);
    printf("%s\n",b);
    int d=0;
    scanf("%d",d);
}

空的,荡漾了,为什么呢?

跟踪一下。

先看看参数void compare(char str[100],int length)一个数组+一个数组的长度,
参数应该不会有什么问题,
然后到最后,'\0'竟然也进入循环,而且一直循环,然后悲剧了,全部替换成了'\0',也就字符串全部没有了。

//if(str[i]==str[j])
            //{
            //str[i]='\0';
            //continue;
            //}

这段注释的代码是可以去除重复元素,我这个程序原本目的是,为了拼接两个字符串,拼接后要从大到小排序。

而且 还有个很蛋疼的事情,当你要从小到大排序时候,你还不能用这种方式进行排除,荡漾了

posted @ 2012-07-31 13:36  爱喝可乐  阅读(1846)  评论(0编辑  收藏  举报