调整动态数组大小时保留用户输入的值的问题

时间:2019-02-05 04:09:34

标签: c++ c

这是我创建动态数组的尝试,该数组在用户为数组预分配数据后会调整大小。我使用第二个索引/计数器,以采用原始计数器的值。

特别是, 如何用用户输入的值替换计算机中的随机值?

tmp = None
for ldjson in soup.find_all('script', type='application/ld+json'):
    if 'ratingValue' in ldjson.text:
        tmp = json.loads(ldjson.text)

具体来说,我对于大小为2的数组的输出错误地显示了我输入的值(2、3、4、5、6、66、55):

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

int main()
{
    int size;
    cout <`enter code here`< "Enter the size of the array: ";
    cin  >> size;
    if (size <= 0) {
        cout << "Array size must be > 0" << endl;
        exit(0);
    }
    int *arr;
    arr = new int[size];

    int num = 0;
    int idx = 0, idx2 = 0;

    while (num != -1)
    {
        cout << "Enter a value to place into an array or -1 to exit: ";
        cin >> num;
        if (num == -1)
        {
            break;
        }
        else if (idx < size)
        {
            arr[idx++] = num;
        }
        else
        {
            idx2 = idx * 2;
            int *newArr = new int[size];
            memcpy(newArr, arr, size * sizeof(int));
            delete [] arr;
            newArr[idx++] = num;
            arr = newArr;

            /*
             int* temp = new int[length + added];
             memcpy(temp, array, length * sizeof(int));
             memcpy(temp + length, added_array, added * sizeof(int));
             delete[] array;
             array = temp;
             */
        }

    }

    for(int x = 0; x < idx; x++)
    {
        cout <<arr[x] << endl;
    }

    cout << endl  << "Reshaped Array of Size: "<< idx << endl;
    return 0;
}

3 个答案:

答案 0 :(得分:0)

从您的代码中,

setPrototypeOf

有一个错误。您正在使用相同的“大小”创建int []。它应该是“ idx2”。

+ memcpy()的副本大小应相应更改(例如idx)

答案 1 :(得分:0)

请替换此行

idx2 = idx * 2;

作者

size = size * 2;

不再需要使用idx2。 这样就可以了。

答案 2 :(得分:0)

虽然最大的问题是将idx2 = idx * 2乘以size而不是乘以2,但是您可能希望对条件测试重新排序以消除三部分测试。您需要做的就是检查num == -1是否为break,如果为idx == size,则仅输入文本,如果是,则重新分配,例如

    while (num != -1)
    {
        cout << "Enter a value to place into an array or -1 to exit: ";
        cin >> num;

        if (num == -1)
            break;
        else if (idx == size) {
            int *newArr = new int[2 * size];
            memcpy(newArr, arr, size * sizeof(int));
            delete [] arr;
            arr = newArr;
            size *= 2;
        }
        arr[idx++] = num;
    }

(除非您进行break;循环,否则您将始终分配arr[idx++] = num;

例如,别忘了释放分配的内存,例如

    delete [] arr;

    return 0;
}

注意,您应该始终验证输入内容,例如

    if (!(cin >> num)) {
        cerr << "error: invalid integer value.\n";
        break;
    }