如何在c中搜索文件中的元素

时间:2016-01-24 18:51:16

标签: c arrays sorting

我的代码需要做三件事:

  • 将文件FILE1中的数字读入数组(动态)
  • 对这些数字进行排序
  • 搜索已排序数组中FILE2的数字输入。

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

int main (int argc, char *argv[]) {

    FILE *fp1 = fopen ("myFile1.txt", "r");
    if (fp1 == NULL) {
        printf ("cannot open this file");
        exit (0);
    }
    FILE *fp2 = fopen ("test1.txt", "w");
    if (fp2 == NULL) {
        puts ("Not able to open this file");
        exit (1);
    }
    int i = 0, num, j, k;
    int *B = NULL;
    int *C;
    int a;
    int size = 32;

    B = malloc (sizeof (int) * size);

    while (fscanf (fp1, "%d", &num) == 1) {
        if (i < size) {
            B[i] = num;
            fprintf (fp2, "%d\r\n", num);
            i++;
        }
        else {
            C = malloc (sizeof (int) * 2 * size);
            memcpy (C, B, size * sizeof (int));
            free (B);

            B = &C[0];
            B[i] = num;
            i++;
            size = size * 2;
            i++;

            for (j = 0; j < size; ++j) {
                for (k = j + 1; k < size; ++k) {
                    if (B[j] < B[k]) {
                        a = &B[j];
                        B[j] = B[k];
                        B[k] = a;
                    }
                }
            }
            printf ("after sorting");
            for (j = 0; j < size; ++j)
                printf ("%d\n", B[j]);
        }
    }
    return 0;
    fclose (fp1);  /* note this code is never reached */
    fclose (fp2);
}

我成功完成了从文件中读取数字的第一部分。但我无法理解如何对这些数字进行排序。

我正在尝试应用冒泡排序,但它会将0放入我的数组中。我的实施方式有何不正确?

1 个答案:

答案 0 :(得分:1)

&是地址运营商。你把它作为指针传递。您需要a = B[i],因为aint

现在,您可以对数字进行降序排序,如果您希望它们升序,请将<更改为>中的(B[j] < B[k])

此外,您必须始终检查malloc是否成功,例如:

if (!B) {
    fprintf(stderr,"B alloc error");
    exit(-1);
}

您也可以考虑realloc

此外,qsort中有一个内置的stdlib.h,其时间比O(n^2)好得多。

注意:我没有测试过您的文件操作,因为您说它们正常工作。