String的实现

来源:互联网 发布:淘宝客定向推广计划 编辑:程序博客网 时间:2024/06/06 11:48

临时版本,操作符还需完善


头文件

#ifndef __MY_STRING_H__#define __MY_STRING_H__#include <iostream>#include<iomanip> using namespace std;class myString{friend ostream& operator<< (ostream&,myString&);//重载<<运算符   friend istream& operator>> (istream&,myString&);//重载>>运算符  public:myString(const char* str = NULL);myString(const myString& strOther);~myString();myString operator+(const myString strOther);bool operator==(const myString &str);private:char* m_strData;};inline myString::myString(const char* str){if(!str){m_strData = NULL;return;}int len = strlen(str);m_strData = new char[len + 1];memcpy(m_strData, str, len);m_strData[len] = '\0';}inline myString::myString(const myString& strOhter){if(!strOhter.m_strData){m_strData = NULL;return;}int len = strlen(strOhter.m_strData);m_strData = new char[len + 1];memcpy(m_strData, strOhter.m_strData, len);m_strData[len] = '\0';}inline myString::~myString(){if(m_strData)delete m_strData;}inline myString myString::operator+(const myString strOther){myString strRet;if(!strOther.m_strData){strRet = *this;}else{int len1 = strlen(this->m_strData);int len2 = strlen(strOther.m_strData);strRet.m_strData = new char[len1 + len2 + 1];memcpy(strRet.m_strData, this->m_strData, len1);memcpy(strRet.m_strData+len1, strOther.m_strData, len2);strRet.m_strData[len1+len2] = '\0';}return strRet;}inline bool myString::operator==(const myString &str){if(strlen(str.m_strData) != strlen(this->m_strData)){return false;}return strcmp(str.m_strData, this->m_strData) ? false : true;}ostream& operator<<(ostream& os,myString& str)  {if(str.m_strData){os << str.m_strData;}return os;  }  istream &operator>>( istream &input, myString &s )  {  char temp[ 255 ]; //用于存储输入流   input>>setw(255)>>temp;  s = temp; //使用赋值运算符   return input; //使用return可以支持连续使用>>运算符   }  #endif

main

// myString.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "myString.h"int _tmain(int argc, _TCHAR* argv[]){myString str1("def");myString str2("abc");myString str3(str2);myString str4( str1 + str2 );cout << str1 <<endl;cout << str2 <<endl;cout << str3 <<endl;cout << str4 <<endl;cout << (str1 == str2) << endl;cout << (str2== str3) << endl; system("pause");return 0;}


0 0