如何使用用户输入拆分/分割数组

时间:2017-05-22 14:29:02

标签: c arrays computer-science

#include <stdio.h>

int main( )
{
    int length = 0;
    int divide = 0;
    int count = 0;
    int i;

    printf("Set the length of array: \n");
    scanf("%d", &length);
    int array[length];

    for(i = 0; i < length; i++)
    {
        scanf("%d", &array[i]);
    }
    printf("Divide array into subarray: \n");
    scanf("%d", &divide);
    for(i = 0; i < divide; i++)
    {
        int countfrom = length / divide * i;
        int countto = countfrom + length / divide;

        for(int j = countfrom; j < countto; j++)
        {
            if( array[j] == 1 && array[j+1] == 0 && array[j+2] == 1)
            {
                count++;
            }
        }
    }
    printf("count: %d\n", count);
    return 0; 
}

这是我到目前为止所拥有的。目的是从用户输入定义数组的长度并将其划分为子数组(int divide也来自用户输入)。 主要目的是计算在分开的子阵列中找到序列101的次数。它的效果很好,除了奇数值。例如,array[length(value: 17)] = {1, 0, 1, 2, 7, 9, 6, 5, 0, 1, 0, 1, 0, 1, 1, 0},如果除数值为5,那么子数组应该是, {1, 0, 1}, {2, 7, 9}, {6, 5, 0}, {0, 1, 0}, {1, 0, 1}, {1, 0},计数值应为3.但是,它打印出四个。

1 个答案:

答案 0 :(得分:-1)

我最初是误解了&#34; 101在分开的子阵列中找到了#34;因为子阵列实际上必须是101.如果你想搜索子阵列,确实需要j循环,但是你确实需要边界检查。

         if( array[j] == 1 && array[j+1] == 0 && array[j+2] == 1)

应该是

        if( j+2 < countto && array[j] == 1 && array[j+1] == 0 && array[j+2] == 1)

(或者您最初可以将countto减去2并将其调整到最多为2的长度。)

原始答案:

根据你的描述,你看起来根本不需要j循环或countto;在i循环中,你应该只是检查array[countfrom]==1 && array[countfrom+1]==0 && array[countfrom+2]==1(并且首先检查从+ 2&lt;长度开始计数,这样你就不会超过数组的末尾)。

但是你的代码假设你有&#34;子阵列&#34;长度3;你应该在给定输入的情况下检查这是否真的是真的,如果不是,则给出错误消息。