/*----------------------------------------------------------------------------- 自定义一个字符串,采用动态char数组作为存储结构,字符串不以空字符结束 by 张海东 090401 -------------------------------------------------------------------------------*/ #include <iostream> #include <cstdlib> using std::endl; using std::cout; namespace Hai { #ifndef MESTRING_H_H_H #define MESTRING_H_H_H class MeString { private: char *pStr; // 指向字符串的指针 int length; // 字符串的长度 public: MeString(); // 默认创建一个1个字符的字符串 MeString(int size); // 创建一个指定长度的字符串 MeString(const char*); MeString(const MeString&); // 以另一个字符串的值来创建一个新字符串 // 以一个字符串的子串来创建一个新字符串 ~MeString(); bool Equal(const MeString&)const ; // 基于值来比较两个字符串是否相等 int Length()const ; MeString& Concat(const MeString& str); // 将串str中的字符连接到this 后面,并返回this MeString Substr(int start, int size)const; // 从串中的第start 个字符起的size个字符当作一个字串返回 char& operator [](int index); }; #endif } #include "MeString.h" using Hai::MeString; MeString::~MeString(){ free(pStr); } MeString::MeString(){ length = 1; pStr = (char*)calloc(length, sizeof(char)); } MeString::MeString(const char* cstr){ length = strlen(cstr); pStr = (char*)calloc(length, sizeof(char)); for(int i=0; i<length; ++i){ pStr[i] = cstr[i]; } } MeString::MeString(int size){ length = size; pStr = (char*)calloc(length, sizeof(char)); } MeString::MeString(const MeString& ref){ length = ref.length; pStr = (char*)calloc(length, sizeof(char)); for(int i=0; i<length; ++i){ pStr[i] = ref.pStr[i]; } } char& MeString::operator [](int index){ return pStr[index]; } bool MeString::Equal(const MeString& ref)const{ bool result = false; return result; } int MeString::Length()const{ return length; } MeString& MeString::Concat(const MeString& ref){ length = length + ref.length; MeString temp(*this); free(pStr); pStr = (char*)calloc(length, sizeof(char)); for(int i=0; i<temp.Length(); ++i) pStr[i] = temp.pStr[i]; for(int i=temp.Length(); i<length; ++i) pStr[i] = temp.pStr[i]; } MeString MeString::Substr(int start, int size)const{ MeString temp(size); for(int i=start-1; i<start+size-1; ++i){ *(temp.pStr) = (*this).pStr[i]; temp.pStr++; } return temp; }