⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 knstring.cpp

📁 本源码为移动公司话费查询中间件TUXEDO使用的实例
💻 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 + -