Функция insertElement () не работает должным образом - PullRequest
0 голосов
/ 07 февраля 2020

У меня проблема в моей программе с моей функцией insertElement (). Я намеревался сделать insertElement, чтобы взять индекс из прототипа и переместить все значения вправо, включая значение этого индекса, вправо ОДИН РАЗ. Итак, если бы у меня был мой массив {1, 2, 3, 4}, и я хотел бы вставить значение «10» в индекс «2», результирующий массив был бы {1, 2, 10, 3, 4 }.

Я знаю, что мне нужно настроить функцию insertElement (), чтобы исправить эту проблему, но я не уверен, с чего начать, кто-нибудь может мне помочь? Вот мой код:

#include <iostream>
using namespace std;

const int CAPACITY = 20;

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

bool insertElement(int array[], int& numberElements, int insertPosition, int insertTarget)
{
    int p = 0;
    int j = 1;
    int arrayPositionFromLast = (numberElements-1);
    if (numberElements>=CAPACITY)
    {
        cout << "Cannot insert an element, array is full." << endl;
        return false;
    } else {
        for (int i=arrayPositionFromLast; i>insertPosition; i--)
        {
            array[arrayPositionFromLast-p]=array[arrayPositionFromLast-j];
            p++;
            j++;
        }
        array[insertPosition] = insertTarget;
    }
    return true;
}

int main()
{
    int array[6] = {1, 2, 3, 4, 5, 6};
    int numArrayElements = 6;
    int endOfArrayValue, insertedValue, insertedValuePosition;

    cout << "Enter a value and a position to insert: ";
    cin >> insertedValue >> insertedValuePosition;

    insertElement(array, numArrayElements, insertedValuePosition, insertedValue);
    displayArray(array, numArrayElements);
}

1 Ответ

0 голосов
/ 07 февраля 2020

сначала вы должны определить свой массив с помощью CAPACITY

int array[CAPACITY] = {1, 2, 3, 4, 5, 6};

Вы можете перемещать данные с помощью memmove.

if (numberElements>=CAPACITY)
{
    cout << "Cannot insert an element, array is full." << endl;
    return false;
} else {
   memmove(array + insertPosition+ 1, array + insertPosition, (numberElements - insertPosition) * sizeof (int));
   array[insertPosition] = insertTarget;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...