用起泡法对输入的十个字符按由大到小顺序排列。


#include<stdio.h>
#include<string.h>
#define N 11
int main()
{
    void sort(char str[]);
    char str[N];
    int i, flag = 1;
    while (flag)
    {
        printf("input string:");
        gets_s(str);
        if (strlen(str) > N-1)
            printf("string too long,input again!\n");
        else
            flag = 0;
    }
    sort(str);
    printf("string sorted:");
    for (i = 0; i < N; i++)
        printf("%c", str[i]);
    printf("\n");
    return 0;
}
void sort(char str[])
{
    int i, j;
    char t;
    for(i=0;i<N&&str[i]!='\0';i++)
        for (j = i + 1; j < N && str[j] != '\0'; j++)
            if (str[j] > str[j + 1])
            {
                t = str[j];
                str[j] = str[j + 1];
                str[j + 1] = t;
            }
}

img


为什么?

根据你的代码,应该是数组越界了吧,当J=N-1,时,J+1=N,数组越界,另外排序那里的逻辑有点问题,修改了一下,如下,供参考:


 
#include<stdio.h>
#include<string.h>
#define N 11
int main()
{
    void sort(char str[]);
    char str[N];
    int i, flag = 1;
    while (flag)
    {
        printf("input string:");
        gets(str);
        if (strlen(str) > N-1)
            printf("string too long,input again!\n");
        else
            flag = 0;
    }
    sort(str);
    printf("string sorted:");
    for (i = 0; i < N; i++)
        printf("%c", str[i]);
    printf("\n");
    return 0;
}
void sort(char str[])
{
    int i, j;
    char t;
    for(i=0;i<N&&str[i]!='\0';i++)
        for (j = i + 1; j < N && str[j] != '\0'; j++)
            if (str[i] > str[j])   //主要修改这段代码
            {
                t = str[j];
                str[j] = str[i];
                str[i] = t;
            }
}

你输入的str字符串太长了,末尾的\0放不下

  • 字符串末尾是默认有一个\0的

把defineN11改成100就行了

如果对你有帮助,还请点个采纳