使用冒泡排序排列字符数组

时间:2016-02-17 17:11:40

标签: c arrays sorting char bubble-sort

到目前为止,这是我的代码。我完全能够对包含数字的文件进行排序,但在字符方面却毫无头绪。它接收我选择的文件并输出带有排序数组的另一个文件。但到目前为止,我所得到的只是空白文件,我无法弄清楚原因。

那么如何修复我的代码来排序一个字符数组然后输出呢?

#include <stdio.h>

int bubble_sort(char *a, int n);

int main(void) {
    char a[10];
    int n = sizeof a / sizeof a[10];
    int i;
    char inname;
    char outname;

    printf("Enter input name: ");
    scanf("%s", &inname);
    printf("Enter output name: ");
    scanf("%s", &outname);

    FILE *in, *out;

    out = fopen(&outname, "w");

    if ((in = fopen(&inname, "r")) == NULL) {
        printf("File not found\n");

    }


    else {
        for (int i = 0; i < 10; i++)
        {
            fscanf(in, "%s ", &a[i]);
        }

        bubble_sort(a, n);

        for (i = 0; i < 10; i++) {
            printf("%s\n", a[i]);
            fprintf(out, "%s\n", a[i]);
        }
    }

        fclose(in);
        fclose(out);
        return 0;
    }


int bubble_sort(char *a, int n) {
    int i, j;
    char temp;

        for (j = 1; j<n; j++)
        {
            for (i = 0; i<n - j; i++)
            {
                if ((int)a[i] >= (int)a[i + 1])
                {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;

            }
        }
    }
    return a[i];
}

1 个答案:

答案 0 :(得分:2)

正如我所看到的,基本问题是

scanf("%s", &inname);

在您的代码中,inname是一个char,无法容纳字符串输入。你需要一个阵列。

您需要更改

char inname;
char outname;

#define NAMSIZ 32

char inname[NAMSIZ] = {0};
char outname[NAMSIZ] = {0};

然后,

scanf("%31s", inname);

并相应地。

fscanf(in, "%s ", &a[i]);同样存在问题。