【问题标题】:Demonstrating a class that prints the combination of a string演示一个打印字符串组合的类
【发布时间】:2021-05-27 20:06:42
【问题描述】:

我正在处理一个“家庭作业”问题,但是教授没有解释任何内容,所以我不能提供更多。 直接引用问题:

"创建一个打印字符串组合的类。程序应该使用两个构造函数,第一个构造函数应该是一个空构造函数,允许声明字符串数组。第二个构造函数将初始化字符串的长度, 为要存储的字符串分配必要的空间,并使用 strcpy 创建字符串本身。您的程序应该包含一个连接两个字符串的成员函数。它应该估计要连接的字符串的长度,为组合的字符串分配内存字符串,然后使用 strcpy() 复制字符串并使用 strcat() 连接字符串。"

我无法理解我在这里实际需要做什么。将不胜感激一些帮助谢谢。 编辑:当我的对象也是字符串数组时,我无法理解如何使用两个构造函数。我在堆上分配吗?有没有 strcpy 的替代品? VS 建议使用 strcpy_s 代替(这在我的情况下不起作用,所以我使用 #define 语句来忽略不推荐使用的警告)

【问题讨论】:

  • 哪一部分不清楚?这个作业很有启发性,告诉你该怎么做。
  • 顺便说一句,如果您的教授让您在没有向您介绍必要的基础知识的情况下完成作业,那么这是我们无法解决的问题,您需要与教授聊天
  • 教授这学期一点帮助都没有,但我需要以一种或另一种方式完成工作。

标签: c++ arrays string class oop


【解决方案1】:

据我了解,您有一个我们可以称为 StringBuilder 的类

这只是为您提供帮助的基本草图。

StringBuilder 有两个构造函数

StringBuilder(char* mystring) // will store myString in an internal buffer

StringBuilder(char* myString, int mystring_len) // will read the length of mystring
// perform allocation and copy the string to new created buffer

还有一个方法

string_join(char* string1, char* string2)

这将分配一个长度为string1+string2的缓冲区,并应用strcat

我认为 string_join 可以使用构造函数中先前定义的字符串

我希望这可以让你澄清一点,但如果我站在你的立场上,我会问你的老师

【讨论】:

  • 感谢您的澄清!是的,我确实先问过老师,但他没有回应.-.
【解决方案2】:

好的,所以你无法理解所有要求。

我不是你的老师,所以我只能从你的帖子中告诉你我的理解。

第一个构造函数应该是一个允许声明字符串数组的空构造函数

创建一个空的(也称为default)构造函数是很常见的,因为只要你想创建该类的对象数组就需要它。初始化可以推迟到另一个方法的调用,或者将对象设置为默认状态。 让我们继续

第二个构造函数将初始化字符串的长度,为要存储的字符串分配必要的空间,并使用 strcpy 创建字符串本身

好的,这是将构建一个已初始化(立即可用)对象的普通构造函数。作为备注,您的老师要求您使用 C 字符串和 C 函数以及原始分配。稍后您将了解到现代 C++ 避免了这种情况。

构造函数中的这种二元性在 C++ 中很常见。例如,ifstream 有一个默认构造函数,需要稍后使用 open 方法进行初始化,以及一个(完整)构造函数将文件名作为参数并立即打开它。或者 std::string 类作为默认 ctor 创建一个空字符串,另一个使用 char 数组并从中初始化字符串。

还有一步:

您的程序应该由一个连接两个字符串的成员函数组成。

好的,现在更清楚了。您需要执行以下操作

class Xxx {
public:
    // default ctor, initialize an empty string
    Xxx();
    // normal ctor, initialize the string
    Xxx(const char *src);
    
    // the main method what will add characters to our string to get our_src + src
    y concat(const char *src);
};

备注:

  • 您应该使用比Xxx 更好的名称 - 毫无疑问,您可以找到一个 :-)
  • 我让concat返回y。最常见的用法是不返回任何内容 (void)、对象本身或对它的 const 引用。这取决于预期如何使用该方法。在不知道更多的情况下,更简单的方法可能是返回void

根据您的最后一个问题,我假设您的老师希望您使用mallocfreenew[]delete[] 来分配字符数组。这称为动态分配。使用堆只是它的一种可能实现方式。

strcpy 是标准 C 库的函数,包含在标准 C++ 库中。它需要在任何环境中可用(即使 MSVC 需要特殊的编译选项)。 strcopy_s 只是 Microsoft 的扩展。它已添加到标准中,但仅作为可选功能。如果您使用不同的编译器,它可能不可用。所以除非你的老师有不同的说法,否则我的建议是坚持strcpy

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2013-05-27
    • 2013-04-27
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多