http://download.csdn.net/source/1652340
我实现的全功能String类,包括全套的运算符重载和string、CString的大部分功能
看看声明,绝对够用了,已全部测试没有明显缺陷
#ifndef _STRING_H_
#define _STRING_H_
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include
#include
#include
//#define DLL
#ifdef DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT
#endif
#ifdef UNICODE
typedef std::wistream _tistream;
typedef std::wostream _tostream;
#else
typedef std::istream _tistream;
typedef std::ostream _tostream;
#endif
enum
{
COUNT = 0,
POS
};
class DLLEXPORT String
{
public:
String();
String(const TCHAR _tch,size_t count);
String(const TCHAR *_tstr,size_t count = 1);
String(const TCHAR *_tstr,size_t offset,size_t _tstrlen);
String(const String &str,size_t count = 1);
String(const String &str,size_t pos,size_t len);
~String();
String& operator=(const TCHAR *_tstr);
String& operator=(const String &str);
String& operator+=(const String &str);
String& operator+=(const TCHAR *_tstr);
friend String operator+(const TCHAR *_tstr,const String &str);
friend String operator+(const String &str,const TCHAR *_tstr);
friend String operator+(const String &str1,const String &str2);
friend bool operator==(const String &str1,const String &str2);
friend bool operator==(const TCHAR *_tstr,const String &str);
friend bool operator==(const String &str,const TCHAR *_tstr);
friend bool operator!=(const String &str1,const String &str2);
friend bool operator!=(const TCHAR *_tstr,const String &str);
friend bool operator!=(const String &str,const TCHAR *_tstr);
friend bool operator>=(const String &str1,const String &str2);
friend bool operator>=(const TCHAR *_tstr,const String &str);
friend bool operator>=(const String &str,const TCHAR *_tstr);
friend bool operator<=(const String &str1,const String &str2);
friend bool operator<=(const TCHAR *_tstr,const String &str);
friend bool operator<=(const String &str,const TCHAR *_tstr);
friend bool operator>(const String &str1,const String &str2);
friend bool operator>(const TCHAR *_tstr,const String &str);
friend bool operator>(const String &str,const TCHAR *_tstr);
friend bool operator<(const String &str1,const String &str2);
friend bool operator<(const TCHAR *_tstr,const String &str);
friend bool operator<(const String &str,const TCHAR *_tstr);
friend _tistream& operator>>(_tistream &_in,String &str);
friend _tostream& operator<<(_tostream &_out,const String &str);
operator const TCHAR *(void) const;
bool Empty();
void Clear();
String& GetLine(size_t pos,String &str,size_t &lpos);
const TCHAR *GetString() const;
const size_t GetLength() const;
TCHAR GetElem(size_t pos);
bool SetElem(size_t pos,TCHAR _tch);
bool Insert(size_t pos,const TCHAR _tch,size_t count = 1);
bool Insert(size_t pos,size_t from,size_t to);
bool Insert(size_t pos,const String &str);
bool Insert(size_t pos,const String &str,size_t strpos,size_t strlen);
bool Insert(size_t pos,const TCHAR *_tstr);
bool Insert(size_t pos,const TCHAR *_tstr,size_t offset,size_t _tstrlen);
String& Assign(const String &str);
String& Assign(const String &str,size_t pos,size_t len);
String& Assign(const TCHAR *_tstr);
String& Assign(const TCHAR *_tstr,size_t offset,size_t _tstrlen);
String& Assign(size_t from,size_t to);
bool Remove(size_t pos,bool toend = false);
bool Remove(size_t pos,size_t len);
int Remove(const TCHAR _tch);
int Remove(const TCHAR *_tstr);
String& Append(const String &str);
String& Append(const String &str,size_t pos,size_t len);
String& Append(const TCHAR *_tstr);
String& Append(const TCHAR *_tstr,size_t offset,size_t _tstrlen);
String& Append(const TCHAR _tch,size_t count);
String& Append(size_t from,size_t to);
bool Replace(size_t pos,size_t len,const String &str);
bool Replace(size_t pos,size_t len,const String &str,size_t strpos,size_t strlen);
bool Replace(size_t pos,size_t len,const TCHAR *_tstr);
bool Replace(size_t pos,size_t len,const TCHAR *_tstr,size_t offset,size_t _tstrlen);
bool Replace(size_t pos,size_t len,const TCHAR _tch,size_t count);
int Replace(const TCHAR _tchold,const TCHAR _tchnew);
int Replace(const TCHAR *_tstrold,const TCHAR *_tstrnew);
String Substr(size_t pos,size_t len);
String Substr(size_t pos);
String Substr();
int Compare(const String &str);
int Compare(size_t pos,size_t len,const String &str);
int Compare(size_t pos,size_t len,const String &str,size_t strpos,size_t strlen);
int Compare(const TCHAR *_tstr);
int Compare(size_t pos,size_t len,const TCHAR *_tstr);
int Compare(size_t pos,size_t len,const TCHAR *_tstr,size_t offset,size_t _tstrlen);
int Find(const TCHAR _tch,size_t pos = 0);
int Find(const TCHAR *_tstr,size_t pos = 0);
int Find(const TCHAR *_tstr,size_t pos,size_t offset,size_t _tstrlen);
int Find(const String &str,size_t pos = 0);
int Find(const String &str,size_t pos,size_t strpos,size_t strlen);
int FindOneOf(const TCHAR *_tstr,size_t pos = 0);
int FindOneOf(const TCHAR *_tstr,size_t pos,size_t offset,size_t _tstrlen);
int FindOneOf(const String &str,size_t pos = 0);
int FindOneOf(const String &str,size_t pos,size_t strpos,size_t strlen);
int rFind(const TCHAR _tch,size_t pos = 0);
int rFind(const TCHAR *_tstr,size_t pos = 0);
int rFind(const TCHAR *_tstr,size_t pos,size_t offset,size_t _tstrlen);
int rFind(const String &str,size_t pos = 0);
int rFind(const String &str,size_t pos,size_t strpos,size_t strlen);
int rFindOneOf(const TCHAR *_tstr,size_t pos = 0);
int rFindOneOf(const TCHAR *_tstr,size_t pos,size_t offset,size_t _tstrlen);
int rFindOneOf(const String &str,size_t pos = 0);
int rFindOneOf(const String &str,size_t pos,size_t strpos,size_t strlen);
size_t SearchAll(const TCHAR _tch,size_t pos = 0);
size_t SearchAll(const TCHAR *_tstr,size_t pos = 0);
size_t SearchAll(const String &str,size_t pos = 0);
String& Format(TCHAR *format,...);
String& AppendFormat(TCHAR *format,...);
private:
void Malloc(size_t size);
void Realloc(size_t size);
void Free();
size_t length;
TCHAR *contents;
};
#endif