2008年8月19日 星期二

簡單運算元多載

MyString.cpp code
#include "stdafx.h"
#include "MyString.h"
#include <string.h>

MyString &MyString::operator+ (const char* str)
{
 static MyString backup;
 backup.assign(this->Getstring());
 backup.append(str);
 
 return backup;
}
MyString &MyString::operator+ (MyString &str)
{
 static MyString backup;
 backup.assign(this->Getstring());
 backup.append(str.Getstring());
 
 return backup;
}
MyString &MyString::operator= (const char *str)
{
 this->assign(str);
 return *this;
}
MyString &MyString::operator= (MyString &str)
{
 this->assign(str.Getstring());
 return *this;
}

MyString::MyString(const char *str)
{
 if(str==NULL)
 {
  Data=NULL;
 }
 else
 {
  Data=new char [strlen(str)+1];
  strcpy(Data,str);
 }
}

MyString::~MyString()
{
   if(Data!=NULL)
 delete [] Data;
   Data=NULL;
}

void MyString::assign(const char *str)
{
   if(Data!=NULL)
 delete [] Data;
   Data=NULL;

   Data=new char [strlen(str)+1];
   strcpy(Data,str);
}

void MyString::clean()
{
   if(Data!=NULL)
 delete [] Data;
   Data=NULL;
}

int MyString::length()
{
 return strlen(Data);
}

const char* MyString::Getstring()
{
 return Data;
}

void MyString::append(const char *str)
{
 if(Data==NULL)
  assign(str);
 else
 {
  char *Backup=new char [length()+1];
  strcpy(Backup,Data);
  delete [] Data;
  Data=new char [strlen(Backup)+strlen(str)+1];
  strcpy(Data,Backup);
  strcat(Data,str);
  delete [] Backup;
 }
}


char *MyString::token(char *str)
{
 if(Data==NULL) 
  return NULL;

    char *result=new char [length()+1];
 int count=0;
 

 for(int i=0;i<length();i++)
 {
  // 檢查是否有token
  bool found=false;
   for(unsigned int j=0;j<strlen(str);j++)
  {
   if(Data[i]==str[j])
   {   //如果有找到 直接跳出 並 found=true
    found=true; 
    break;
   }
  }

   if(!found) //沒找到表示要把目前處理的字元放到 result內
      result[count++]=Data[i];
   else
   {
    result[count]='\0';
    // Backup the Left String
    char *backup=new char[length()-count+1];
    int index=0;
    strcpy(backup,&Data[count+1]);

    //把剩下的重新給Data
    delete [] Data;
    Data=new char[strlen(backup)+1];
    strcpy(Data,backup);
    delete [] backup;

    return result;
   }
 }
    result[count]='\0';
 delete [] Data;
 Data=NULL;
 return result;
}

沒有留言: