本文介绍了C ++数组溢出问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮忙!当用户输入的数字超过20时,代码不起作用。如果用户输入的数量超过20,我应该返回false,但我认为我的代码是错误的。

这是我检查数组的代码:

Please help! The code does not work when the user input numbers more than 20. I'm supposed to return false if the user inputs more than 20 but I think my code is wrong.
Here's my code for checking the array:

if(numElems + 1 >= CAPACITY) // inside the inserElement function
        return false;

if((position<0) || (position>numElems)) //inside the removeElement function
	    return false;





我尝试过:





What I have tried:

#include <iostream>
using namespace std;

const int CAPACITY = 20;

// displayArray - display the array on a single line separated by blanks.
// @param: int array[] is an unordered array of integers
// @param: int numberOfElements
// [Already implemented]                           
//[Already implemented]
void displayArray(int array[], int numElems);

//ToDo: Declare a function fillArray that fills an int array with values entered
// by the user. Stop reading when the user inputs -1 or you reach CAPACITY.
// @param: int array[] is an unordered array of integers when leaving this function
// @param: int& numberElements is the number of Elements in the array after function
// @returns void.
void fill_array (int array[], int& numElems);

//ToDo: Declare a function that removes (i.e., deletes) the element
// removeElement - removes the element of the given index from the given array.
// @param: int array[] is an unordered array of integers
// @param: int& numberElements
// @param: int position of element to delete
// @returns: true if delete was successful, false otherwise
bool removeElement (int array[], int& numElems, int position);


//ToDo: Delcare a function that inserts the element in the given position
// insertElement - removes the element of the given index from the given array.
// @param: int array[] is an unordered array of integers
// @param: int& numberElements
// @param: int position to insert into
// @param: int target to insert.
// @returns: true if insert was successful, false otherwise
bool insertElement (int array[], int& numElems, int position, int target);

//ToDo: Declare a funcxtion that searches for an element in the given array
// searchElement - searches for the element in the given array.
// @param int array[] is an unordered array of integers
// @param int numberOfElements
// @param int target
// @returns index of element or -1 if not found.
int searchElement(int array[], int numElems, int target);

int main()
{
  // The NumArray can be partially filled, we use variable NumArrayElems to keep track of how many numbers
  // have been stored in the array. 
    int array[CAPACITY];	    // an int array with a given CAPACITY
    int numElems=0;             // the array is initially empty, i.e., contains 0 elements
    int position, target;
    int value;

  // 1. ToDo: Call your fillArray function to read in a sequence of integer values,
  // separated by space, and ending with -1. Store the values in the NumArray array 
  // and the number of elements in NumArrayElems.
  // Display the contents of the array afterwards 
    cout << "Enter a list up to 20 integers or -1 to end the list" << endl;

    fill_array (array, numElems);

    displayArray(array, numElems);


  // 2. ToDo: Read in a value and position from the user. Call your insertElement function
  // to insert the given value into the given position of the array 
  // Display the contents of the array afterwards 
    cout << "Enter a value and a position to insert: ";
    cin >> target >> position;

    insertElement (array, numElems, position, target);

    displayArray(array, numElems);

  // 3. ToDo: Read in a value and call your searchElement function.
  // if the value is  found, delete it from the array using your function
  // if the value not found, print "Value not found in array"
  // Display the contents of the array afterwards 
    cout << "Enter a value to delete from the array: ";
    cin >> target;

    position = searchElement(array, numElems, target);
        if (position != -1)
            removeElement (array, numElems, position);
        else
            cout << "Value not found!";

    displayArray(array, numElems);


    cout << "Enter a value to append: ";
    cin >> value;

    insertElement (array, numElems, numElems, value);

    displayArray(array, numElems);

    return 0;
}

void fill_array (int array[], int& numElems)
{
    //cout << "Enter a list up to 20 integers or -1 to end the list" << endl;
    for (numElems=0; numElems<CAPACITY;numElems++)
    {
        cin >> array[numElems];
        if (array[numElems] == -1 )
        break;
    }
}


int searchElement(int array[], int numElems, int target)
{
    int i;

	for (i = 0; i < numElems; i++)
    {
		if(array[i] == target)
		{
			return i;
		}
    }
    return -1;
}


bool insertElement (int array[], int& numElems, int position, int target)
{
    for(int i = numElems-1; i >= position; i--)
    {
        array[i+1] = array[i];
    }
    array[position] = target;
    numElems = numElems + 1;

    return true;

    if(numElems + 1 >= CAPACITY)
        return false;
}


bool removeElement (int array[], int& numElems, int position)
{
	for(int j=position; j<(numElems-1); j++)
	{
		array[j]=array[j+1];
	}

	numElems--;
	    return true;

	if((position<0) || (position>numElems))
	    return false;

}

void displayArray(int array[], int numElems)
{
    for (int i = 0; i < numElems; i++)
        cout << array[i] << " ";
        cout << endl;
}

推荐答案

bool insertElement (int array[], int& numElems, int position, int target)
{
    if( numElems >= CAPACITY - 1 )
        return false;

    for(int i = numElems-1; i >= position; i--)
    {
        array[i+1] = array[i];
    }
    array[position] = target;
    numElems = numElems + 1;

    return true;
}


bool removeElement( int array[], int& numElems, int position )
{
    if( ( position < 0 ) || ( position >= numElems ) )
        return false;

    for(int j=position; j<(numElems-1); j++)
    {
        array[j]=array[j+1];
    }

    numElems--;
    return true;
}


int value = myInputFunction();

if( value < 0 ) return;//exit app

int myInputFunction()
{
  int input = CAPACITY + 1;//invalide
  while( input > CAPACITY ) {
    cout << "Enter a value : ";
    cin >> input;
  }
  return input;
}


#include <iostream>
#include <array>
using namespace std;

template <size_t CAPACITY>
class Array
{
  size_t len = 0;
  std::array<int, CAPACITY> a;


public:

  bool insert( size_t index, int value )
  {
    if ( len == CAPACITY ) return false;
    for ( size_t i = len; i > index; --i)
      a[i] = a[i-1];
    a[index] = value;
    ++len;
    return true;
  }
  // implement other methods below...

  friend ostream &  operator <<  ( ostream & os, const Array<CAPACITY> & arr )
  {
    for ( size_t i=0; i<arr.len; ++i )
    cout << arr.a[i] << " ";
    return os;
  }
};

template <size_t CAPACITY>
void fill( Array<CAPACITY> & arr)
{
  size_t index = 0;
  int value;
  do
  {
    cout << "please insert an integer (-1 to terminate)" << endl;
    cin >> value;

  } while ( value != -1 && arr.insert(index++, value) );

}


int main()
{
  Array<20> arr;
  fill(arr);
  cout << arr << endl;
}


这篇关于C ++数组溢出问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 00:54
查看更多