这是我用C++语言实现的一个String类,类的声明如下:
目前还没有重载 + 操作符,有时间把这个也实现。
说明:CPP中实现有些用到库函数,我这里没有表出所引用的头文件。因此直接拷贝可能会导致编译错误。
// SdkString.h
class SdkString
{
public:
// 构造函数
SdkString();
// 构造函数
SdkString(const wchar_t* lpsrcStr);
// 拷贝构造函数
SdkString(const SdkString& srcStr);
// 析构函数
~SdkString();
// = 操作符
SdkString& operator =(const SdkString& srcStr);
// = 操作符
SdkString& operator =(const wchar_t* lpsrcStr);
// 在当前字符串后面追加字符串,返回当前this指针的引用,
// 这样可以支持链式表达式,如str.Append(L"lee").Append(L"234")
SdkString& Append(const wchar_t* lpsrcStr);
// 格式化字符串
SdkString& Format(const wchar_t* lpformat, ...);
// 转化为小写
SdkString& MakeLower();
// 转化为大写
SdkString& MakeUpper();
// 倒序,如“123”变化“321”
SdkString& MakeReverse();
// 得到子字符串,给定起始索引和子字符串长度
SdkString SubString(int startIndex, int length);
// 判断当前字符是不是空
bool IsEmpty() const;
// 从资源文件中加载字符串
bool LoadString(HINSTANCE hInst, int nID);
// 判断当前字符是否包含指定字符串,可以忽略大小写
bool IsContains(const wchar_t* lpstrValue, bool ignoreCase = false) const;
// 判断当前字符串是不是以指定的字符开头
bool IsStartWith(wchar_t ch) const;
// 判断当前字符串是不是以指定的字符串开头
bool IsStartWith(const wchar_t* lpsrcStr) const;
// 判断当前字符串是不是指定的字符结束
bool IsEndWith(wchar_t ch) const;
// 判断当前字符串是不是以指定的字符串结束
bool IsEndWith(const wchar_t* lpsrcStr) const;
// 判断当前字符串是不是与指定的字符串相同,可以忽略大小写
bool IsEqual(const wchar_t* lpsrcStr, bool ignoreCase = false) const;
// 转化为wchar_t*
const wchar_t* ToString() const;
// 得到当前字符串长度
size_t GetSize_r() const;
private:
int m_maxCapacity; // The size of buffer string.
wchar_t* m_pDataArray; // The pointer to the null-terminated string.
};
说明:由于考虑到这个String类应该是一个很底层的类,所以就没有用到Windows定义的宏和数据类型,如BOOL,IN,OUT,WCHAR,LPWSTR等。这里面用到的都是C++基本数据类型。该类目前只有Unicode版本,还没有ANSI版本。
由于篇幅,具体实现暂时不列出来,有兴趣的同事可以实现这些函数。等下一篇帖子我再把具体实现贴出来。