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

pointer to string that can be used to dynamically allocate array of strings

本文关键字:字符串 用于 动态分配 数组 指针      更新时间:2023-10-16

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

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

和指向双精度对象的指针,该指针可用于动态分配具有相同数量元素作为附件的双精度对象数组。每个元素将保存关联附件的成本,也就是说,元素0中的成本是元素0中附件的成本。如果附件数为零,则将指针设置为空,因为不需要分配空间。

这是我的课程到目前为止没有最后两个要求。Im难住了。

#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

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

您不应该动态分配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的可能,如果您需要放大它,您将不得不将整个数组复制到一个新的数组

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

struct Option
{
    char* Name;
    double price;
}

那么你正在寻找的是一个集合,也许是一个std::vector<Option>。我将留给你去谷歌std::vector,这是一个很好的学习练习。

顺便说一句,你一定要用c++吗?你可能会发现另一种语言,如c#或Java,更容易学习编程。

如果你不能使用向量,制作你自己的集合。我不会把代码贴出来,因为我觉得这是一个作业,但它们通常是这样工作的:

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