如何忽略数组中的0并打印出唯一的数字

时间:2015-11-08 11:45:26

标签: c++11

所以我的程序应该使用一个5大小的数组来存储输入的整数。如果它是重复的整数,则不会存储到数组中。

这里的问题是我的数组会无限期地存在0,因为我将大小初始化为5.我只需要输出唯一数字我该怎么做?

我注意到的一件事是没有我的 unsigned int position; 每当我输入一个重复的整数时它会跳过索引;

例如数组[0] = 10,数组[1] = 10 //重复,数组[2] = 20 //输入20,这应该存储到数组[1]但事实并非如此。 所以我只有在不重复的情况下才能增加位置,以确保在输入重复时不会跳过索引。

有什么我可以做或做一个不同的方法来获得我的结果?

代码:

#include <iostream>
#include <iomanip>
#include <array>

using namespace std;

const unsigned int MIN_VALUE = 10;
const unsigned int MAX_VALUE = 100;
const size_t arraySize = 5;
array <int, arraySize> numberArray = {};

template<size_t size>
bool isDuplicate(array<int, size> array, int value)
{
    for (unsigned int i = 0; i < array.size(); i++)
    {
        if (value == array[i])
        {
           return true;
        }
    }
    return false;
}

int main()
{

  unsigned int input;
  unsigned int position = 0;

  for (unsigned int i = 0; i < arraySize; i++)
  {
      cout << "Enter # " << (i + 1) << " : ";
      cin >> input;

     if (input < MIN_VALUE || input > MAX_VALUE)
     {
        cout << "The number entered is not in valid range of 10 to 100" << endl;
        --i;
     }
     else if (!isDuplicate(numberArray, input))
     {
         numberArray[position] = input;
         position++;
         cout << "The number: " << input << " is unique\n" << endl;
     } 
   }
} 

谢谢!

1 个答案:

答案 0 :(得分:0)

代码中唯一缺少的部分是else if块下面的附加块:

 else {
     cout << "The number: " << input << " is not unique\n" << endl;
     --i;
 }

当值为重复时,您将减少您的位置,并向用户发出警告。

如果我必须在保留大部分代码的同时更新你的程序,我会写:

#include <iostream>
#include <iomanip>
#include <array>

using namespace std;

const unsigned int MIN_VALUE = 10;
const unsigned int MAX_VALUE = 100;
const size_t arraySize = 5;
// Initialize all array values to 0 (see std::array documentation)
array <int, arraySize> numberArray = {0};

template<size_t size>
bool isDuplicate(array<int, size> arr, int val)
{
    bool ret = false;

    // Do not waste time with invalid values
    if (val < MIN_VALUE || val > MAX_VALUE)
        return ret;

    // Using size_t to express size
    size_t pos = 0;

    // Loop until reaching the end OR a not yet set array value
    while ( pos < arr.size() && arr[pos]){
        if (arr[pos] == val) {
            // Found!
            ret = true;
            break;
        }
        ++pos;
    }

    return ret;
}

int main()
{
  unsigned int input = 0;
  size_t position = 0;

  while (position < numberArray.size()) {
      cout << "Enter # " << (position + 1) << " : ";
      cin >> input;

     if (input < MIN_VALUE || input > MAX_VALUE) {
        cout << "The number entered is not in valid range of 10 to 100" << endl;
     } else if (!isDuplicate(numberArray, input)) {
         numberArray[position] = input;
         // Pre-increment operator is more efficient, see doc.
         ++position;
         cout << "The number: " << input << " is unique\n" << endl;
     } else {
         cout << "The number: " << input << " is not unique\n" << endl;
     }
   }
}

它看起来像一个非常奇怪的规范的练习。应该更好地解释,以便为您提供更相关的现实生活解决方案。 ;) 希望这会有所帮助。