You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++回文类中实现动态C字符串存储(禁用string/cstring)

Palindrome类实现建议

首先,你当前的头文件不可行,核心问题是缺少用于动态存储字符的指针成员,必须补充以下私有成员:

char* data;

关于动态C字符串的大小调整

C风格数组无法直接修改大小,必须通过重新分配内存实现:

  • 当需要存储新内容时,先计算所需的内存空间(比如要存储原单词的一半:奇数长度取(orig_len + 1)/2,偶数长度取orig_len/2,还要额外加1存储结束符'\0')。
  • 用new char[所需大小]分配新内存,将需要保留的内容逐一复制到新内存中。
  • 释放旧内存(delete[] data;),再让data指向新分配的内存块。
  • store_size记录当前分配的总内存大小,len可用来记录原单词的长度,或者存储的一半内容的长度,根据需求明确即可。

关键方法实现要点

  • 构造函数/析构函数/赋值运算符:
    • 默认构造函数:初始化data = nullptr,len = 0,store_size = 0。
    • 带const char*参数的构造函数:先手动遍历输入字符串计算原长度(不能用strlen),调用静态isPalindrome判断是否为回文,再计算需要存储的一半长度,分配内存并复制对应字符。
    • 拷贝构造和赋值运算符必须实现深拷贝:不能直接复制指针,要重新分配内存并复制内容,避免浅拷贝导致的内存泄漏或重复释放。
    • 析构函数必须执行delete[] data;释放动态内存。
  • set_palindrome方法:
    先验证输入字符串是否为回文,再按上述动态内存调整逻辑更新data、len和store_size。
  • isPalindrome静态方法:
    手动遍历字符串首尾字符,逐一比较,直到中间位置,全部相等则返回true。
  • 访问类方法(char_at、set_char_at等):
    要做边界检查,确保传入的pos在有效范围内,避免越界访问。

补充说明

因为禁止使用string和cstring,所有字符串操作(长度计算、字符复制、比较)都要手动实现:

  • 计算字符串长度:从首字符开始遍历,直到遇到'\0',计数。
  • 字符比较:逐字符对比,直到出现不同字符或到达字符串末尾。

内容的提问来源于stack exchange,提问作者Leaf Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:37:03