从文件和输出最大子数组中读取整数数组

时间:2015-10-15 16:47:31

标签: c arrays

我需要阅读以下单独的数组" MSS_TestProblems.txt":

[1, 4, -9, 8, 1, 3, 3, 1, -1, -4, -6, 2, 8, 19, -10, -11] 
[2, 9, 8, 6, 5, -11, 9, -11, 7, 5, -1, -8, -3, 7, -2]
[10, -11, -1, -9, 33, -45, 23, 24, -1, -7, -8, 19] 
[31,-41, 59, 26, -53, 58, 97, -93, -23, 84] 
[3, 2, 1, 1, -8, 1, 1, 2, 3]
[12, 99, 99, -99, -27, 0, 0, 0, -3, 10] 
[-2, 1, -3, 4, -1, 2, 1, -5, 4] 

一旦我读完它们,我需要计算EACH数组的最大子阵列总和,并将结果输出为.txt文件,格式如下:

[1, 4, -9, 8, 1, 3, 3, 1, -1, -4, -6, 2, 8, 19, -10, -11] 
[8, 1, 3, 3, 1, -1, -4, -6, 2, 8, 19]
34

[2, 9, 8, 6, 5, -11, 9, -11, 7, 5, -1, -8, -3, 7 -2]
[2, 9, 8, 6, 5]
30

[10, -11, -1, -9, 33, -45, 23, 24, -1, -7 -8, 19] 
[23,24, -1, -7, -8, 19]
50

[31,-41, 59, 26, -53, 58, 97, -93, -23, 84] 
[59, 26, -53, 58, 97]
187

[3, 2, 1, 1, -8, 1, 1, 2, 3]
[3, 2, 1, 1]
7

[12, 99, 99, -99, -27, 0, 0, 0, -3, 10] 
[12, 99, 99]
210

[-2, 1, -3, 4, -1, 2, 1, -5, 4] 
[4, -1, 2, 1]
6

我的问题是如何读取这些值,将它们放在数组中,并将它们传递给我的函数?如何将解决方案写入.txt文件?(以下是我的一个函数示例):

int iteration(int * Array1, int arraySize)
{
    int maxSum = 0;
    int start = 0;
    int end = 0;

    printArray(Array1, start, arraySize - 1);

    for(int i = 0; i < arraySize; i++)
    {
        int sum = 0;

        for(int j = i; j < arraySize; j++)
        {
            sum = sum + Array1[j];

            if(sum > maxSum)
            {
                start = i;
                end = j;
                maxSum = sum;
            }

        }

    }

    printArray(Array1, start ,end);

    return maxSum;
}

1 个答案:

答案 0 :(得分:0)

打印阵列很简单:

void arr_print(FILE *f, const int arr[], size_t n)
{
    fputs("[", f);

    for (size_t i = 0; i < n; i++) {
        if (i) fputs(", ", f);
        fprintf(f, "%d", arr[i]);
    }

    fputs("]\n", f);
}

扫描更复杂。您可以使用strtol读取数字并手动解析其余语法,即括号和逗号。下面的函数执行此操作并使用大多数max元素填充数组。它返回列表中元素的数量,最大值大于max,或者出错时为-1:

int arr_scan(const char *str, int arr[], size_t max)
{
    size_t n = 0;

    // parse opening bracket
    while (*str == ' ') str++;
    if (*str != '[') return -1;
    str++;

    for (;;) {
        char *tail;            
        long x;

        // scan number
        x = strtol(str, &tail, 0);            
        if (tail == str) return -1;

        // fill array
        if (n < max) arr[n] = x;
        n++;

        // parse comma or closing bracket
        str = tail;
        while (*str == ' ') str++;
        if (*str == ']') break;
        if (*str != ',') return -1;
        str++;
    }

    return n;
}

逐行阅读您的输入行fgets并使用arr_scan进行扫描。如果要打印子阵列,请使用指针算法:

arr_print(arr + start, end - start);