一个程序,它将两个整数数组传递给一个函数,该函数然后将两者中常见的值复制到第三个数组中并将其显示在int main()中

时间:2018-03-08 10:59:01

标签: c++ arrays

#include <iostream>

using namespace std;
void myfunction(int array[], int array1[], int array2[], int, int, int);
int main()
{
    int array[5], array1[5], array2[5];
    cout << "Enter array:";
    for (int i = 0; i < 5; i++)
    {
        cin >> array[i];
        cin >> array1[i];
    }
    myfunction(array, array1, array2, 5, 5, 5);
    for (int i = 0; i < 5; i++)
        cout << array2[i];
}
void myfunction(int array[], int array1[], int array2[], int n, int m, int o)
{
    int k = 0;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            if (array[i] == array1[j])
                array2[k] = array1[j];
            k++;
        }
    for (int i = k + 1; i < o; i++)
        array2[i] = 0;
}

这是我想到的逻辑。但它给出了我不知道的分段错误。而且,我不知道我错在哪里。请指导我

2 个答案:

答案 0 :(得分:1)

我相信你有一个主要问题:

if(array[i]==array1[j])
    array2[k]=array1[j];
    k++;

每次执行k++部分,但只有在找到匹配项时,才应每array次迭代执行一次。这是给你seg故障的部分。

您可以像这样修复整个嵌套:

for (int i = 0; i < n; ++i, ++k)
{
    const auto val = array[i];
    if (std::any_of(array1, array1+n, [&val](int v){return v == val;}))
        array2[k] = array[i];
    else
        array2[k] = 0;
}

考虑到你不使用c++11,你可以写上面的等价物:

for (int i = 0; i < n; ++i, ++k)
{
    bool match = false;
    for (int j = 0; j < m; ++j)
    {
       if (array[i] == array1[j])
       {
           match = true;
           break;
       }
    }

    if (match)
        array2[k] = array[i];
    else
        array2[k] = 0;
}

这样你也可以跳过以下循环,这也有一个问题:

for (int i = k + 1; i < o; i++)

对于{1, 2, 3, 3, 5}{1, 2, 4, 4, 5}等输入数据的结果,您应该得到{1, 2, 0, 0, 5}根据您的评论是预期输出。

一般情况下,我建议您使用std::vectorstd::array,因为您使用的是const大小的数组。这样,您就不必将数组大小作为硬编码值传递到此处。此外,您将能够使用类似foreach的循环,代码将变得更清晰。

答案 1 :(得分:0)

您的问题出在以下for循环中: -

 for(int i=0; i<n; i++)
     for(int j=0; j<m; j++)
     {
           if(array[i]==array1[j])
           array2[k]=array1[j];
              k++;//this is being incremented each iteration
      }
   for(int i=k+1; i<o; i++)//What are you doing here I = 5 + 1 = 6
   array2[i]=0;// what will happened here it will not execute

如下所示纠正: -

 for(int i=0; i<n; i++)
 for(int j=0; j<m; j++)
 {
       if(array[i]==array1[j])
       {
          array2[k]=array1[j];
          k++;
       }
  }