易码技术论坛

 找回密码
 加入易码
搜索
查看: 1367|回复: 7

[源码] 我写的string类

[复制链接]
发表于 2007-12-2 21:49:53 | 显示全部楼层 |阅读模式
  1. //===============================string.h===============================//
  2. #ifndef _string_h
  3. #define _string_h

  4. class string
  5. {
  6. private:
  7.         char *ptr;
  8. public:
  9.         string():ptr(0){}
  10.         string(const char *p);
  11.         string(string &p);
  12.         ~string();
  13. public:
  14.         string &operator=(const char *p);
  15.         string &operator=(string &p);
  16.         bool operator==(const char *p);
  17.         bool operator==(string &p);
  18.         bool operator!=(const char *p);
  19.         bool operator!=(string &p);
  20.         bool operator!();
  21.         char operator[](unsigned long i);
  22.         unsigned long size();
  23.         void subString(string &p,int start,int finish);
  24.         char *getPointer();
  25. };
  26. #endif
复制代码

[ 本帖最后由 yan 于 2007-12-2 21:52 编辑 ]
 楼主| 发表于 2007-12-2 21:50:47 | 显示全部楼层
  1. //===============================string.cpp===============================//
  2. #include <string.h>
  3. #include "string.h"

  4. string::string(const char *p)
  5. {
  6.         ptr=new char[strlen(p)+1];
  7.         strcpy(ptr,p);
  8. }

  9. string::string(string &p)
  10. {
  11.         ptr=new char[strlen(p.ptr)+1];
  12.         strcpy(ptr,p.ptr);
  13. }

  14. string::~string()
  15. {
  16.         if(ptr)delete ptr;
  17. }

  18. string &string::operator=(const char *p)
  19. {
  20.         if(ptr)
  21.         {
  22.                 delete ptr;
  23.                 ptr=0;
  24.         }
  25.         if(p)
  26.         {
  27.                 ptr=new char[strlen(p)+1];
  28.                 strcpy(ptr,p);
  29.         }
  30.         return *this;
  31. }

  32. string &string::operator=(string &p)
  33. {
  34.         if(ptr)
  35.         {
  36.                 delete ptr;
  37.                 ptr=0;
  38.         }
  39.         if(p.ptr)
  40.         {
  41.                 ptr=new char[strlen(p.ptr)+1];
  42.                 strcpy(ptr,p.ptr);
  43.         }
  44.         return *this;
  45. }

  46. bool string::operator==(const char *p)
  47. {
  48.         if(p&&ptr)
  49.         {
  50.                 if(!strcmp(ptr,p))return true;
  51.         }
  52.         else if(!(p||ptr))return true;
  53.         return false;
  54. }

  55. bool string::operator==(string &p)
  56. {
  57.         if(p.ptr&&ptr)
  58.         {
  59.                 if(!strcmp(ptr,p.ptr))return true;
  60.         }
  61.         else if(!(p.ptr||ptr))return true;
  62.         return false;
  63. }

  64. bool string::operator!=(const char *p)
  65. {
  66.         if(p&&ptr)
  67.         {
  68.                 if(!strcmp(ptr,p))return false;
  69.         }
  70.         else if(!(p||ptr))return false;
  71.         return true;
  72. }

  73. bool string::operator!=(string &p)
  74. {
  75.         if(p.ptr&&ptr)
  76.         {
  77.                 if(!strcmp(ptr,p.ptr))return false;
  78.         }
  79.         else if(!(p.ptr||ptr))return false;
  80.         return true;
  81. }

  82. bool string::operator!()
  83. {
  84.         if(ptr)
  85.         {
  86.                 if(*ptr)return false;
  87.         }
  88.         return true;
  89. }

  90. char string::operator[](unsigned long i)
  91. {
  92.         return ptr[i];
  93. }

  94. unsigned long string::size()
  95. {
  96.         return strlen(ptr);
  97. }

  98. void string::subString(string &p,int start,int finish)
  99. {
  100.         if(ptr)
  101.         {
  102.                 delete ptr;
  103.                 ptr=0;
  104.         }
  105.         ptr=new char[finish-start+1];
  106.         memcpy(ptr,&p.ptr[start],finish-start);
  107.         ptr[finish-start]=0;
  108. }

  109. char *string::getPointer()
  110. {
  111.         return ptr;
  112. }
复制代码

[ 本帖最后由 yan 于 2007-12-2 21:53 编辑 ]
 楼主| 发表于 2007-12-2 21:55:54 | 显示全部楼层
学C++不久,很少写过C++的代码,请大虾看看,哪些地方需要纠正,意见和建议都可以提出来。
发表于 2007-12-3 05:15:46 | 显示全部楼层
两个string.h...尽量不要和知名文件同名,以免混淆。
貌似就做了些运算符重载,实用方法不是很多啊,string的话基本常用了除了sub以外还有很多呢,replace、trim、indexof、charAt等等,都能实现最好啦。
 楼主| 发表于 2007-12-3 10:16:23 | 显示全部楼层
LS说的是,但是代码对不对呢,有没有更好的方法?
发表于 2007-12-3 14:11:26 | 显示全部楼层
那个啥,我记不清楚了,是不是应该用:
delete[] ptr;
?
 楼主| 发表于 2007-12-3 21:00:21 | 显示全部楼层
哦,可能是我记错了。
发表于 2007-12-4 00:14:54 | 显示全部楼层
同6#
delete[]
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-28 23:57 , Processed in 0.008490 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表