C++ 查找一个数组的使用次数';s包含在另一个C++;

C++ 查找一个数组的使用次数';s包含在另一个C++;,c++,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*** 这就是我提

我需要一个代码来确定一个数组与另一个数组的匹配次数。用户将输入两个数组的大小及其值。 输出应如下所示:

***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;
}
int v1Size=5;
int v2Size=3;
int向量1[]={1,2,1,2,1};
int向量2[]={1,2,1};
int计数器=0;
布尔包含(int v1Pos){
int j=0;
int i=v1Pos;
整数检查=0;
而((jcout不要使用int数组,应该使用std::vector
类型,它可以有任何大小


然后,您可以使用搜索向量中的向量。

检查
向量1
的每个位置,如果该位置包含整个
向量2
。如果是,则递增
计数
。递增位置

伪码

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
init计数为0
带0的init pos1
而pos1
您可以使用
std::search

int main()
{
int v1Size = 5;
int v2Size = 3;

int vector1[] = {1,2,1,2,1};
int * v1End = vector1 + v1Size;
int vector2[] = {1,2,1};
int * v2End = vector2 + v2Size;

int counter = 0;
for (int * p = vector1; p != v1End; ++p) {
    counter += (std::search(p, v1End, vector2, v2End) == p);
}

std::cout << counter << std::endl;
return 0;
}
intmain()
{
int v1Size=5;
int v2Size=3;
int向量1[]={1,2,1,2,1};
int*v1End=vector1+v1Size;
int向量2[]={1,2,1};
int*v2End=vector2+v2Size;
int计数器=0;
对于(int*p=vector1;p!=v1End;++p){
计数器+=(std::search(p,v1End,vector2,v2End)==p);
}

std::我们可以看看字符串搜索算法:您遇到的确切问题是什么?您有2个int i;其中一个未初始化。请尝试打开编译器警告,并修复它们。由于for循环中的未初始化变量,代码具有未定义的行为。通常程序将陷入无休止的循环中,因为
i
将包含大于
v1Size-v2Size
的值,但程序不会在
循环时离开外部
。在解决了我提到的第一个问题后,您将停留在无止境的循环中,因为如果您有匹配项,您只会增加
j
。您需要为这种情况找到解决方案,其中
vector2[j]==vector1[I]
它必须是一个数组。这是练习的一部分……但无论如何,谢谢。谢谢你说我的答案没有用……你没有说它必须是
int[]
。如果你需要动态大小数组,你必须用
new[]在堆上分配它,但是老实说,我们在C++中使用容器。你可以使用C代码数组:用C数组来搜索St::/Cuth>。一个指向数组的指针(包括一个结束)是一个转发迭代程序。CPP:22:23:错误:期望表达式Auto CaveSv2[[= ](int *p){]它在[= ]中给出了一个错误。.我太聪明了。只是在循环中使用搜索更容易获得正确答案