演示打印字符串组合的类

时间:2021-02-25 12:57:59

标签: c++ arrays string class oop

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

<块引用>

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

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

2 个答案:

答案 0 :(得分:0)

据我所知,你有一个我们可以称之为 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 可以与构造函数中先前定义的字符串一起使用

我希望这能让你澄清一点,但如果我是你的话,我会问你的老师

答案 1 :(得分:0)

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

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

<块引用>

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

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

<块引用>

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

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

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

相关问题