找出它在另一个C ++中包含的数组的次数

时间:2017-11-29 08:33:57

标签: c++

我需要一个代码来查找一个数组在另一个数组中的适合次数。用户将输入两个数组及其值的大小。 输出应如下所示:

***enter size of first array:***
11
***enter first array values:***  
1 2 1 2 1 2 1 2 1 2 1
***enter size of second array:*** 
3
***enter second array values:***  
1 2 1
***result: 5 times***

我提出的代码的一部分:

int v1Size = 5;
int v2Size = 3;

int vector1[] = {1,2,1,2,1};
int vector2[] = {1,2,1};

int counter = 0;


bool contain(int v1Pos) {

    int j = 0;
    int i = v1Pos;
    int check = 0;
    while ((j < v2Size) || (i < v1Size-v2Size)) {
        for (int i; i < v1Size-v2Size; i++) {
            if(vector2[j] == vector1[i]) {
                check++;
                j++;
            }
        }
    }

    if (check == v2Size) {
        return true;
    } else {
        return false;
    }
}

int main(){

    for(int i = 0; i < v1Size; i++) {
        if(contain(i)) {
            counter++;
        }
    }
    cout << counter << endl;

    return 0;
}

在这种情况下,我定义了数组以简化调试,但它应该适用于每个数组:vector1的大小&lt; 500和矢量2的大小&lt; 100。

任何人都知道我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:0)

检查vector1的每个位置,如果该位置包含整个vector2。如果是,请递增count。增加位置。

伪代码

init count with 0
init pos1 with 0
while pos1 < v1Size - v2Size
    init pos2 with 0
    init match with true
    while pos2 < v2Size
        if vector1[pos1 + pos2] not equals vector2[pos2]
            set match = false
            break while loop
    if match
        increment count
    increment pos1

答案 1 :(得分:-1)

您应该使用std::vector<int>类型,而不是使用int数组,它可以具有任何大小。

然后,您可以使用std::search在向量中搜索向量。