这是我创建动态数组的尝试,该数组在用户为数组预分配数据后会调整大小。我使用第二个索引/计数器,以采用原始计数器的值。
特别是, 如何用用户输入的值替换计算机中的随机值?
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;
}
答案 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;
}