zoukankan      html  css  js  c++  java
  • 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;
                //}

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

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

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/fish124423/p/2616696.html
Copyright © 2011-2022 走看看