?? knstring.cpp
字號:
/*************************************************/
//file name :SFString.cpp
//
/*************************************************/
//compare比較長度和內容是否完全相等
#include "KNString.h"
//*****************class CStrPtrLen******************
UInt8 CStrPtrLen::s_chCaseInsensitiveMask[] =
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, //0-9
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, //10-19
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, //20-29
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, //30-39
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, //40-49
50, 51, 52, 53, 54, 55, 56, 57, 58, 59, //50-59
60, 61, 62, 63, 64, 97, 98, 99, 100, 101, //60-69 //stop on every character except a letter
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, //70-79
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, //80-89
122, 91, 92, 93, 94, 95, 96, 97, 98, 99, //90-99
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, //100-109
110, 111, 112, 113, 114, 115, 116, 117, 118, 119, //110-119
120, 121, 122, 123, 124, 125, 126, 127, 128, 129 //120-129
};
Bool16 CStrPtrLen::Equal(const CStrPtrLen &compare) const
{
if ((compare.m_unLen == m_unLen) && (memcmp(compare.m_pchPtr, m_pchPtr, m_unLen) == 0))
return true;
else
return false;
}
Bool16 CStrPtrLen::Equal(const char* compare) const
{
if ((::strlen(compare) == m_unLen) && (memcmp(compare, m_pchPtr, m_unLen) == 0))
return true;
else
return false;
}
//在指定len的大小長度是否完全相等
Bool16 CStrPtrLen::EqualIgnoreCase(const char* compare, const UInt32 len) const
{
// compare thru the first "len: bytes
// Assert(compare != NULL);
if (len == m_unLen)
{
for (UInt32 x = 0; x < len; x++)
if(s_chCaseInsensitiveMask[m_pchPtr[x]] != s_chCaseInsensitiveMask[compare[x]])
return false;
return true;
}
return false;
}
//判斷m_pchPtr 前長度為len的compare字符串相等
Bool16 CStrPtrLen::NumEqualIgnoreCase(const char* compare, const UInt32 len) const
{
//Assert(compare != NULL);
if (len <= m_unLen)
{
for (UInt32 x = 0; x < len; x++)
if(s_chCaseInsensitiveMask[m_pchPtr[x]] != s_chCaseInsensitiveMask[compare[x]])
return false;
return true;
}
return false;
}
char* CStrPtrLen::GetBuffer(UInt32 unLen /* = 0 */) const
{
// convert to a "NEW'd" zero terminated char array
// caler is reponsible for the newly allocated memory
if(unLen == 0 || unLen > m_unLen)
unLen = m_unLen;
char *theString = new char[unLen+1];
if ( m_pchPtr && m_unLen > 0 )
::memcpy( theString, m_pchPtr, m_unLen );
theString[m_unLen] = 0;
return theString;
}
void CStrPtrLen::ReleaseBuffer(char* pchRel)
{
//release buffer
if(pchRel)
delete [] pchRel;
}
//轉化int類
UInt32 CStrPtrLen::Atoi()
{
char* pInt;
UInt32 unToi;
pInt = new char[m_unLen+1];
memcpy(pInt,m_pchPtr,m_unLen);
pInt[m_unLen] = '\0';
unToi = atoi(pInt);
delete [] pInt;
return unToi;
}
//************************************************
//
//空的字符串
CKNString::CKNString()
{
m_pchPtr = NULL;
m_unLen = NULL;
}
//單個字節
CKNString::CKNString(char ch,UInt32 unLen/* =1 */)
{
if(unLen == 0)
unLen = 1;
m_pchPtr = new char[unLen+1];
m_pchPtr[0] = ch;
m_pchPtr[1] = '\0';
m_unLen = 1;
}
//格式化一個字符串psz
CKNString::CKNString(const char* psz)
{
if(psz)
{
m_unLen = strlen(psz);
m_pchPtr = new char[m_unLen+1];
memcpy(m_pchPtr,psz,m_unLen);
m_pchPtr[m_unLen] = '\0';
}
else
{
m_unLen = 0;
m_pchPtr = NULL;
}
}
//copy構造器
CKNString::CKNString(const CKNString& stringSrc)
{
m_unLen = stringSrc.m_unLen;
if(m_unLen>0)
{
m_pchPtr = new char[m_unLen];
memcpy(m_pchPtr,stringSrc.m_pchPtr,m_unLen);
}
else
m_pchPtr = NULL;
}
CKNString::~CKNString()
{
if(m_pchPtr)
{
delete [] m_pchPtr;
m_pchPtr = NULL;
}
}
//get m_pchPrt
char* CKNString::GetBuffer(UInt32 unLen) const
{
return m_pchPtr;
}
void CKNString::Empty()
{
if(m_pchPtr)
{
delete [] m_pchPtr;
m_pchPtr = NULL;
m_unLen = 0;
}
}
Bool16 CKNString::operator ==(const CKNString& strSrc) const
{
if(m_unLen != strSrc.m_unLen)
return false;
if(!memcmp(m_pchPtr,strSrc.m_pchPtr,m_unLen))
return false;
return true;
}
const CKNString& CKNString::operator=(const char* pchSrc)
{
this->Empty();
if(pchSrc)
{
m_unLen = strlen(pchSrc);
m_pchPtr = new char[m_unLen + 1];
memcpy(m_pchPtr,pchSrc,m_unLen);
m_pchPtr[m_unLen] = '\0';
}
return *this;
}
const CKNString& CKNString::operator=(const CKNString& strSrc)
{
this->Empty();
if(strSrc.m_unLen > 0)
{
m_unLen = strSrc.m_unLen;
m_pchPtr = new char[m_unLen + 1];
memcpy(m_pchPtr,strSrc.GetBuffer(),m_unLen);
m_pchPtr[m_unLen] = '\0';
}
return *this;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -