Here is a pretty crappy version of a more dynamic solution. It would make more sense to make the array internal to the class, but it still demonstrates my point
#include<iostream>
using namespace std;
class Numbers
{
int iValue;
int iCount;
public:
inline bool bExists (Numbers * numarray, int iSize, int iVal)
{
for (int i(0); i < iSize; i++)
if (numarray[i].iValue == iVal)
return true;
return false;
}
inline int GetCount (Numbers * numarray, int iSize, int iVal)
{
for (int i(0); i < iSize; i++)
if (numarray[i].iValue == iVal)
iCount++;
return iCount;
}
inline int GetIndex (Numbers * numarray, int iSize, int iVal)
{
for (int i(0); i < iSize; i++)
if (numarray[i].iValue == iVal)
return i;
return -1;
}
inline void AddNum (Numbers * numarray, int iSize, int iVal)
{
if (!bExists(numarray, iSize, iVal))
numarray[GetFreeSpot(numarray, iSize)].iValue = iVal;
else
numarray[GetIndex(numarray, iSize, iVal)].iCount++;
}
inline int GetFreeSpot(Numbers * numarray, int iSize)
{
return GetIndex(numarray, iSize, 0);
}
inline int GetNum ()
{
return iValue;
}
Numbers(void): iValue(0), iCount(0) {}
~Numbers(void) {};
};
int main()
{
Numbers * pNums;
int iSize(0);
int iNum(0);
cout << "Enter array size: ";
cin >> iSize;
pNums = new Numbers [iSize];
//load in the values
for (int i(0); i < iSize; i++)
{
cout << "\nValue " << i + 1 << ": ";
cin >> iNum;
pNums[i].AddNum(pNums, iSize, iNum);
}
for (int i(0); i < iSize; i++)
{
if (pNums[i].GetNum())
cout << "Number: " << pNums[i].GetNum() << " " << "Count: " << pNums[i].GetCount(pNums, iSize, pNums[i].GetNum()) << endl;
}
cin.ignore(cin.rdbuf()->in_avail());
cin.get();
delete [] pNums;
return 0;
}
Note that this won't count zeros, considering them null values