自己动手封装一个string类

本文详细介绍了如何在C++中封装一个string类,通过提供构造函数、赋值操作符重载、字符串拼接、比较等方法来实现基本的字符串操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常c++笔试题里会要求封装一个string类,这里面的确考查了对c++应用的能力,我这个人有个不好就是记性不怎么好,所以要靠记录下来给以后用到的时候做个参考. 

#include <string.h>

class string {
 char *str;
 int size;
public:
 string() {
  size = 0;
  str = NULL;
 }

 virtual ~string() {
  empty();
 }

 string(const char *s) {
  if (s) {
   size = strlen(s)+1;
   str = (char *)malloc(size);
   strcpy(str, s);
  } else {
   size = 0;
   str = NULL;
  }
 }

 string(const string& s) {
  if (s.str) {
   size = strlen(s.str)+1;
   str = (char *)malloc(size);
   strcpy(str, s.str);
  } else {
   size = 0;
   str = NULL;
  }
 }

 void empty(void) {
  if (str) {
   size = 0;
   free(str);
   str = NULL;
  }
 }

 string& operator=(const string& s) {
  if (this != &s) {
   empty();
   if (s.str) {
    size = strlen(s.str)+1;
    str = (char *)malloc(size);
    strcpy(str, s.str);
   }
  }

  return *this;
 }

 string operator+(const string& s) const {
  if (str && s.str) {
   string _s;
   _s.size = strlen(str) + strlen(s.str) + 1;
   _s.str = (char *)malloc(size);
   strcpy(_s.str, str);
   strcat(_s.str, s.str);
   return _s;
  } else {
   return str ? str : s.str;
  }
 }

 bool operator==(const string& s) const {
  if (str && s.str) {
   return !strcmp(str, s.str);
  } else if (!str && !s.str) {
   return true;
  } else {
   return false;
  }
 }

 operator char *() {
  return str;
 }

 operator const char *() const {
  return str;
 }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值