1

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

如果附件个数为0,则不需要分配空间,设置指针为空。

还有一个指向双精度的指针,它可以用来动态分配一个具有与附件相同数量的元素的双精度数组。每个元素都会保存关联附件的成本,即元素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

请帮助这是一门在线课程,我已经在谷歌上搜索和阅读了几个小时。

4

2 回答 2

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];

但是由于在这种情况下不可能重新分配,因此如果您需要扩大它,则必须将整个数组复制到新的数组中。

于 2013-05-10T05:53:55.710 回答
0

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

struct Option
{
    char* Name;
    double price;
}

比你要找的是一个集合,也许是一个std::vector<Option>. 我会留给你用谷歌搜索std::vector,这是一个很好的学习练习。

顺便说一句,你必须使用 C++ 吗?您可能会发现 C# 或 Java 等另一种语言更容易学习编程。

如果您不能使用矢量,请制作您自己的集合。我不会发布代码,因为我觉得这是一项任务,但它们通常是这样工作的:

  • 使用默认大小的数组进行实例化,例如 10。
  • 保留一个带有这个最大值的变量
  • 保留一个包含当前项目数的变量(从 0 开始,可能称之为计数或其他东西)
  • 添加指针时,将其放入元素“count”并增加计数器
    • 如果 count = capacity 然后分配一个新数组 2*capacity,将所有元素复制到其中,删除旧数组并将新数组分配给旧数组的变量。
于 2013-05-10T06:02:21.870 回答