指向字符串的指针,可用于动态分配字符串数组

时间:2013-05-10 05:45:33

标签: c++

我正在编写一个项目及其用于汽车批次和即时创建课程。我需要满足某些要求。对于附件描述,我需要使用指向字符串的指针,该字符串可用于动态分配具有确切数量的附件的字符串数组。每个元素都将保存附件的名称。

如果附件数为0,则无需分配空间,将指针设置为空。

还指向一个double的指针,它可以用来动态分配一个双精度数组,其元素数量与附件相同。每个元素将保持相关附件的成本,也就是说,元素0中的成本是元素0中附件的成本。 如果附件数为零,则将指针设置为null,因为不需要分配空间。

到目前为止,我的班级没有最后两个要求。我很难过。

#ifndef VEHICLE_H

#define VEHICLE_H

class Vehicle

{
    public:
        Vehicle();

    protected:
        int vin_number;
        string manufacturer;
        string model;
        string color;
        double basecost;
        int accessories;
        string accessory_list;


    private:
};

#endif // VEHICLE_H

请帮助它是一个在线课程,我一直在谷歌搜索和阅读几个小时。

2 个答案:

答案 0 :(得分:1)

您不应动态分配string的数组。

如果您决定使用C ++,则应该使用STL和集合。像这样:

std::list<std::string> accessory_list;

如果您决定使用C,动态分配的字符串列表可能如下所示:

//init
int accessory_count = 0;
int accessory_cap = 20;
char** accessory_list = calloc (sizeof(char*), accessorry_cap);

//add:
if (accessory_count==accessory_cap) {
  accessory_cap += 20;
  accessory_list = realloc (accessory_list, sizeof(char*)* accessorry_cap);
}
accessory_list[accessory_count++] = new_accessory.

如果你真的需要一个动态的字符串数组,你可以这样做:

int accessory_arr_cap = 20;
string* accessory_arr = new string[accessory_arr_cap];

但由于在这种情况下不存在realloc,如果需要放大,则必须将整个数组复制到新数组中。

答案 1 :(得分:0)

如果选项的成本和名称相关,请将它们放在结构中:

struct Option
{
    char* Name;
    double price;
}

比你正在寻找的是一个集合,也许是std::vector<Option>。我会留给你google std :: vector,这是一个很好的学习练习。

另外,您是否必须使用C ++?您可能会发现另一种语言,如C#,或者Java更容易学习编程。

如果您不能使用矢量,请自行制作。我不会发布代码,因为我觉得这是一个任务,但这是他们通常的工作方式:

  • 使用默认大小数组(例如10)进行实例化。
  • 使用此最大值保留变量
  • 保留一个变量,其中包含当前的项目数(从0开始,可能称之为计数或其他)
  • 添加指针时,将其放入元素'count'并递增计数器
    • 如果count = capacity,则分配一个新的数组2 *容量,将所有元素复制到其中,删除旧数组并将新数组分配给旧数组的变量。