gpt4 book ai didi

C++ 函数通过 strlen() 运行 'string' 类型参数,将新值保存到虚拟类实例,将虚拟类传递给新函数。为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:53 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,使用 C++ 中的双线程链表按名称和评级(从高到低)对酒厂进行排序。有一个 List 类和 Winery 类。 Winery 的每个实例都存储名称、位置、英亩和评级。

在 main 中,调用函数“insertWinery”,它接受四个参数:名称、位置、英亩和评级。此函数生成 Winery 的新实例 *w,并使用 strlen 编辑“名称”和“位置”。然后它将这两个参数的数值保存在名为“nm”和“loc”的新变量中,并将其复制到虚拟“*w”中,然后将 *w 传递给 list.cpp 中的函数“insert”,这实际上做插入。

我不明白为什么要将字符串更改为数值。我可以遍历字符串中的字符并按字母顺序排列不同的酒厂,然后使用循环在列表中找到正确的位置以按名称插入新酒厂,那么为什么我要将其改为数字呢?当然用数字搜索更容易,但我看不出这个数字与酒厂的正确字母顺序有什么关系,而且可能有些酒厂名称中的字符数相同。

我将在此处包含函数“insertWinery”的拷贝:

static void insertWinery(char *name, char *location, int acres, int rating)
{
Winery *w;
char *nm = new char[strlen(name) + 1];
char *loc = new char[strlen(location) + 1];

strcpy(nm, name);
strcpy(loc, location);
w = new Winery(nm, loc, acres, rating);
wineries-> insert(*w);
delete[] nm;
delete[] loc;
delete[] w;
}

*w 被传递给的插入函数是列表类型:

void List::insert(const Winery& winery)
{
// code to be written
}

如果需要任何更多信息,请告诉我,不过我认为不需要更多信息。我只想知道为什么在 *w 传递给 List::insert(const Winery& winery) 之前将名称和位置的值更改为数字。我需要编写插入函数,但我不知道如何处理这些值,或者当我现在有随机字符串长度而不是名称时,我应该如何在列表中运行名称线程。

非常感谢任何帮助,谢谢

编辑:酿酒厂 build 者:

Winery::Winery(const char * const name, const char * const location, const int acres, const int rating) :
name(NULL),
location(NULL),
acres(acres),
rating(rating)
{
if (this->name)
delete[] this->name;
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);

if (this->location)
delete[] this->location;
this->location = new char[strlen(location) + 1];
strcpy(this->location, location);
}

最佳答案

I don't understand why the strings are being changed into numerical values.

这不是您的代码在做什么。以下代码:

char   *nm  = new char[strlen(name) + 1];

分配新内存,字符数name的长度加1。它根本不是把name转换成数字。然后 strcpy(nm, name); 将参数 name 中的字节复制到 nm 指向的新分配的内存中。

您的代码可能实际上不需要执行此复制。但是,如果不知道 Winery 构造函数在做什么,就无法确定。

关于C++ 函数通过 strlen() 运行 'string' 类型参数,将新值保存到虚拟类实例,将虚拟类传递给新函数。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26456908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com