加倍任意数组的字符串

时间:2015-02-12 12:35:10

标签: c++ arrays

1:我的目标是使用指针创建两个任意数组:一个具有名称,另一个具有相应的数字。从我之前的问题来看,我知道将数组加倍是处理任意大小的好方法。所以,我试图相应地加倍两个数组。但是,当int数组加倍时,字符串数组不会加倍。你能解释一下,问题是什么?

2:是否有替代创建任意字符串数组来存储名称列表?

以下是代码的一部分:

string *pn = new string [size];
int *pd = new int [size];
while (x != 0) {

    if (size == k+1) {
        pn = doubn (pn, size);
        pd = doubd (pd, size);
    }
    pn[k] = name;
    pd[k] = val;
    cout << "Another entry? (0 for exit)";
    cin >> x;
    getline (cin, name, ',');
    cin >> val;
    ++k;
}

for (int i = 0; i<k; ++i) {

    cout << pn[i] << " - " << pd[i] << " days"; }
del (pn, pd, k);
cin.get ();
cin.ignore();
}

string* doubn (string *pn, int size) {

    string* pnn = new string [size*2];
    for (int i = 0; i < size; ++i) {

        pnn [i] = pn[i]; }

    delete pn;
    return pnn; }

int* doubd (int *pd, int size) {

    int *pdn = new int [size*2];
    for (int i = 0; i<size; ++i) {
        pdn [i] = pd[i];}
    delete pd;
    return pdn;}

2 个答案:

答案 0 :(得分:1)

要使用任意大小的数组,请使用向量。

向量是C ++标准模板库(STL)的一部分,需要#include<vector>标题。

有关详情,请查看:http://www.cplusplus.com/reference/vector/vector/

此外,您应该使用delete []代替delete

答案 1 :(得分:0)

您对delete分配的内存使用new[],您应该使用delete[]代替。

无论如何,使用std::vector会更简单,也不会出错。