C ++阵列比较和打印的区别

时间:2015-12-01 12:57:53

标签: c++ arrays

我想要做的是比较两个数组A和B,以及数组B中没有出现在数组A中的数字。

http://pastebin.com/u44DKsWf我的完整代码。

我认为问题始于第42行。

int writingPosition = 1;
for (int c = 1; c<=firstArrayLength; c++)
{
    for(int z = 1; z>secondArrayLength; z++)
    {
        if (firstArray[c] != secondArray[z])
        {
            thirdArray[writingPosition] = secondArray[z];
            writingPosition++;
        }
        if (firstArray[c] == secondArray[z])
        {
            thirdArray[c] == '0'; // NEED FIXING I GUESS
        }
    }
}

我的想法是我将不适合我的任务的数字标记为'0',所以稍后我可以打印数组而忽略0。

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用C ++标准库中binary_search模块中的algorithm 请注意,这适用于std::vector

Live demo

#include <array>
#include <iostream>
#include <algorithm>

int main()
{
    std::array<int, 3> firstArray { 1, 3, 5 }; // stack based array like int[3]
    std::array<int, 3> secondArray { 2, 3, 4 };

    // Sort first array to be able to perform binary_search on it
    std::sort(firstArray.begin(), firstArray.end());

    for (const auto secondArrayItem : secondArray)
    {
        // Binary search is a very efficient way of searching an element in a sorted container of values
        if (std::binary_search(firstArray.begin(), firstArray.end(), secondArrayItem) == false)
        {
            std::cout << "Item " << secondArrayItem << " does not exist in firstArray" << std::endl;
        }
    }

    return 0;
}

答案 1 :(得分:0)

您的代码有很多问题。

大小s的数组总是从0到s-1,所以在你的情况下你应该使用

for(int g = 0; g<50; g++)

i.s.o。

for(int g = 0; g<=50; g++)

和其他数组相似

其次,您使用char元素填充第三个数组,然后将它们与int进行比较

thirdArray[c] == '0';

以后

if(thirdArray[g] != 0)

两次都使用'0'0,但不要混淆它们。

但是通用算法也没有多大意义,你将基于索引c作为索引z覆盖第三个数组。 z的范围也没什么意义。

(我认为这是家庭作业,或者至少你正在努力学习,所以不会简单地给出解决方案)

答案 2 :(得分:0)

为什么不存储字符串中不存在的数字然后从cout打印字符串?这就是你如何做到这一点:

string output = "";
bool isFound = false;
for (int c = 1; c<=secondArrayLength; c++)
{
    isFound = false;
    for(int z = 1; z>firstArrayLength; z++)
    {
        if (secondArray[c] == firstArray[z])
        {
            isFound = true;
        }
    }
    if(!isFound)
          output+=(secondArray[c].str()+" ");
}
cout<<output;

试试这个必须正常工作

答案 3 :(得分:0)

对代码的更正应该有点像:

int writingPosition = 1;
for (int c = 1; c<=firstArrayLength; c++)
 {
  for(int z = 1; z<=secondArrayLength; z++)
   {
    if (firstArray[c] != secondArray[z])
     {
       thirdArray[writingPosition] = secondArray[z];
       writingPosition++;
     }
     if (firstArray[c] == secondArray[z])
        continue;
   }
 }
  

旁注:首选使用0作为数组的基本索引。