#define BOOL int
#define UINT unsigned int
#define CINT const int
#define PCHAR const char*
class CString
{
private:
char *m_str;
int m_size;
public:
CString(void);
CString(CINT nSize);
CString(const char *str);
CString(const char str);
~CString();
//清空字符串
void RemoveAll();
//返回字符串
operator char*();
//賦值
void operator=(CString str);
//獲取字符串個數
int GetSize()const;
//獲取從右邊第一個開始到nCount個的字符串
CString GetRightStr(CINT nCount);
//獲取左邊第一個到nCount個的字符串
CString GetLeftStr(CINT nCount);
//獲取第nLeft個到nRight個字符串
CString GetLeftToRightStr(CINT nLeft,CINT nRight);
//不區分大小寫的比較大小
BOOL Compare(const CString &str);
//區分大小寫的比較大小
BOOL CompareLowerCare(const CString &str);
//將大寫轉成小寫
CString SetBigToSmall()const;
//將小寫轉成大寫
CString SetSmallToBig()const;
private:
int strlen(const char *str);
void strcpy(char *NewStr,const char* OldStr);
BOOL strcmp(const char *str1,const char *str2);
};
CString::CString(void)
{
m_size = 0;
m_str = new char[2];
m_str[1] = '\0';
}
CString::CString(const char *str)
{
m_size = strlen(str);
m_str = new char[m_size+1];
strcpy(m_str,str);
}
CString::CString(CINT nSize)
{
m_size = nSize;
m_str = new char[m_size];
}
CString::CString(char str)
{
m_size = 1;
m_str = new char[2];
m_str[0] = str;
m_str[1] = '\0';
}
CString::~CString()
{
RemoveAll();
}
CString::operator char*()
{
return m_str;
}
void CString::operator=(CString str)
{
RemoveAll();
m_size = str.GetSize();
m_str = new char[m_size];
strcpy(m_str,str);
}
int CString::GetSize()const
{
return m_size;
}
CString CString::GetRightStr(CINT nCount)
{
//方法一:
// char *str = new char[nCount];
// str[nCount] = '\0';
// for(int i = 1;i <= nCount;i++)
// str[nCount-i] = m_str[m_size-i];
// return str;
return GetLeftToRightStr(m_size-nCount,m_size);
}
CString CString::GetLeftStr(CINT nCount)
{
//方法一:
// char *str = new char[nCount];
// int i = -1;
// while(nCount > ++i)
// str[i] = m_str[i];
// str[i] = '\0';
// return str;
return GetLeftToRightStr(0,nCount);
}
CString CString::GetLeftToRightStr(CINT nLeft,CINT nRight)
{
int i = nRight - nLeft + 1;
char *str = new char[i];
str[i+1] = '\0';
while(-1 < --i)
str[i] = m_str[nLeft + i];
return str;
}
BOOL CString::Compare(const CString &str)
{
CString t = SetBigToSmall();
CString text = str.SetBigToSmall();
return strcmp(t , text.m_str);
}
BOOL CString::CompareLowerCare(const CString &str)
{
return strcmp(m_str,str.m_str);
}
CString CString::SetBigToSmall()const
{
char *text = m_str;
int i = -1;
while(m_size > ++i)
if(65 <= text[i] && 90 >= text[i])
text[i] = text[i] + 32;
return text;
}
CString CString::SetSmallToBig()const
{
char *text = m_str;
int i = -1;
while(m_size > ++i)
if(97 <= text[i] && 122 >= text[i])
text[i] = text[i] - 32;
return text;
}
void CString::RemoveAll()
{
delete []m_str;
m_size = 0;
}
int CString::strlen(const char *str)
{
int i = 0;
while(str[i])
i++;
return i;
}
void CString::strcpy(char *NewStr,const char* OldStr)
{
int i = strlen(OldStr);
NewStr[i] = '\0';
while(-1 < i--)
NewStr[i] = OldStr[i];
}
BOOL CString::strcmp(const char* str1,const char *str2)
{
int size1 = strlen(str1) , size2 = strlen(str2);
if(size1 > size2)
return -1;
else if(size1 < size2)
return 1;
else
{
int i = -1;
while(size1 > ++i)
{
if(str1[i] > str2[i])
return -1;
else if(str1[i] < str2[i])
return 1;
}
}
return 0;
}
CString
最新推荐文章于 2025-06-02 21:48:27 发布