C语言,一个字符串按字母排序?????

这个代码有什么错啊??不能排啊???还有就是比较字符的顺序就是比较字符的ASSIC码值,对吧,直接对字符进行关系操作符的比较到底对不对???
#include<stdio.h>
void main()
{
char c[10];
int i;
int j;
int temp;
gets(c);
for(i = 0;i<9;i++)
for(j = 0;j<9;j++)
if(c[j]>c[j+1])
{
temp = c[j];
c[j] = c[j+1];
c[j+1] = temp;
}
puts(c);
}

排序算法有问题,而且,你最好确定一下你输入字符串的长度:

#include<stdio.h>
#include<string.h>
void main()
{
char c[10];
int i;
int j;
int temp;
int length;
gets(c);
length=strlen(c);//你可能输入不到10个字符,所以确定总共字符数
for(i=0;i<length-1;i++)//for(i = 0;i<9;i++)
for(j=0;j<length-1-i;j++)//这儿问题最大 for(j = 0;j<9;j++)
if(c[j]>c[j+1])
{
temp = c[j];
c[j] = c[j+1];
c[j+1] = temp;
}
puts(c);
}

追问

for(j=0;j<length-1-i;j++) //这儿问题最大 for(j = 0;j<9;j++)

这句怎么理解啊?????为什么是j<length-1-i 呢??????

追答

冒泡排序的方法,来的,第一次把最大的数排到最后一位

从第一个数开始,第一个和第二个比较,如果第一个比第二个则,交换

然后第二个跟第三个比较,第二个比第三个大,交换。。依次类推,用循环表达出来就应该是这种

关系

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-08
#include<stdio.h>
#include<string.h>
void main()
{
    char c[10];
    int i;
    int j;
    int temp;
    gets(c);
    int len = strlen(c);
    for(i = 0; i<len; i++)
        for(j = 0; i+j<len-1; j++)
            if(c[j]>c[j+1])
            {
                temp = c[j];
                c[j] = c[j+1];
                c[j+1] = temp;
            }
    puts(c);
}

冒泡排序有问题。

第2个回答  2014-01-08
这么写与外层i的循环有什么关系?
相似回答