S. 自定义字符串连接 (Custom String Concatenation)

传统 1000 ms 256 MiB
标准 IO
文本比较

题目描述

在 C++ 中,通常的字符串拼接会修改其中一个对象。但在某些应用场景中,我们希望在不修改原字符串的情况下生成一个新的连接后的字符串对象。

请实现一个自定义的 String 类,该类管理一个字符指针 char *sPtr 和一个长度 int length。你需要严格按照以下要求实现内存管理和运算符重载:

  1. 构造函数:支持从 const char * 转换构造,默认为空字符串。
  2. 拷贝构造函数:必须实现深拷贝(Deep Copy),以防止多个对象指向同一块内存导致 Double Free 错误。
  3. 析构函数:正确释放内存。
  4. 赋值运算符 (=):重载 = 以支持对象间的深拷贝赋值。
  5. 连接运算符 (+):重载 +,使得 string1 = string2 + string3 成立。注意: 该操作不能修改 string2string3 的内容,必须返回一个新的 String 对象。
  6. 输出运算符 (<<):重载流输出运算符以便打印字符串。

输入格式

输入的第一行包含一个整数 TT,表示测试用例的数量。 对于每组测试数据,包含两行文本:

  • 第一行:字符串 S1S_1
  • 第二行:字符串 S2S_2

注意:输入字符串可能包含空格。

输出格式

对于每组测试数据,输出一行,格式为: "S1" + "S2" = "Result" 其中 ResultS1S_1S2S_2 连接后的结果。

样例

样例输入

2
The date is
 August 1, 1993
Hello
World

样例输出

"The date is" + " August 1, 1993" = "The date is August 1, 1993"
"Hello" + "World" = "HelloWorld"

数据范围与提示

数据范围

  • 1T501 \leq T \leq 50
  • 字符串长度 1length10001 \leq length \leq 1000
  • 字符集包括 ASCII 字母、数字和空格。

提示

根据题目要求,类定义应包含:

class String {
    friend ostream &operator<<(ostream &output, const String &s);
public:
    String(const char * const = ""); 
    String(const String &); 
    ~String(); 
    const String &operator=(const String &);
    String operator+(const String &);
private:
    char *sPtr; 
    int length; 
};