shke308 发表于 2016-6-19 09:53:06

选择排序发

#include <stdio.h>
#include <string.h>

int main()
{
        char a, b, str1, str2;
        char temp;
        int i, j, n, min;

        gets(a);
        printf("string a :%s\n", a);
        gets(b);
        printf("string b :%s\n", b);

        for(i=0; a; i++)
        {
                str1 = a;
        }
        for(j = 0; b; j++, i++)
        {
                str1 = b;
        }
        str1 = '\0';
        printf("原来的字符串:%s\n", str1);

        strcpy(str2, str1);
        strlwr(str2);
        n = strlen(str2);

        for(i = 0; i < n-1; i++)
        {
                min = i;
                for(j = i+1; j < n; j++)
                {
                        if(str2 > str2)
                        {
                                min = j;
                        }
                }
                if(i != min)
                {
                        temp = str1;
                        str1 = str1;
                        str1 = temp;
                }
        }

        printf("改变顺序后的字符串:%s\n", str1);
        return 0;

}


我先要输出的结果是AaBbCc按照这样的排序结果输出的,但是程序输出的结果跟我逾期的不一样,又找不出哪里有问题,求大神解答

无符号整形 发表于 2016-6-19 12:47:37

那是因为小写字母的ASCII码小,大写字母的ASCII码大
你只能自己定义一个数组,排序那个数组

小剑剑 发表于 2016-6-19 12:54:33

本帖最后由 小剑剑 于 2016-6-19 12:56 编辑

比较是用的是str2,输出str1他str1交换了而str2没交换,后面的比较都错了
改成 if(I!=min)
{
   temp=str1;
   str1=str;
   str1=temp;
temp=str2;
   str2=str;
   str2=temp;


}

还有这样子可能出现大小写排序不一致的情况例如排序成这样aaAAaa

shke308 发表于 2016-6-19 13:39:33

你没看清楚吧,str2是把str1全部换成了小写了,不这样做的话,你的b肯定会在C后面的,str2我只是用来判断他的字母顺序用而已,我要改变的就是str1之后把改变后的输出出来

shke308 发表于 2016-6-19 13:40:08

小剑剑 发表于 2016-6-19 12:54
比较是用的是str2,输出str1他str1交换了而str2没交换,后面的比较都错了
改成



你没看清楚吧,str2是把str1全部换成了小写了,不这样做的话,你的b肯定会在C后面的,str2我只是用来判断他的字母顺序用而已,我要改变的就是str1之后把改变后的输出出来

shke308 发表于 2016-6-19 13:46:45

小剑剑 发表于 2016-6-19 12:54
比较是用的是str2,输出str1他str1交换了而str2没交换,后面的比较都错了
改成



我知道什么意思了。
页: [1]
查看完整版本: 选择排序发