二进制查找替换常用函数
最近編寫了一些二進制查找和替換的函數,用起來非常方便,代碼如下:
二進制查找函數。
LPBYTE FindStrInByte(LPBYTE pbSrc,DWORD dwSrcLen,LPBYTE pbStr,DWORD dwStrLen)
{
LPBYTE pbDest=NULL;
LPBYTE pbCur=pbSrc;
LPBYTE pbTemp=(LPBYTE)memchr(pbCur,pbStr[0],dwSrcLen);
? ??
while(pbTemp!=NULL)
{
if (memcmp(pbTemp,pbStr,dwStrLen)==0)
{
pbDest=pbTemp;
break;
}
pbCur=pbTemp+1;
? ? ? ? pbTemp=(LPBYTE)memchr(pbCur,pbStr[0],dwSrcLen);
}
return pbDest;
}
//字符串的分離函數,將一段字符串數據根據固定的分隔符分離成一個字符串列表。
typedef basic_string<TCHAR> XString;
typedef vector<XString> ?StringArray;
void SepliteStr(const XString & strData,const XString &strSepe,StringArray &strArray,BOOL bAllowDataEmpty)
{
strArray.clear();
int iPos=0;
int iPrePos=0;
XString strSingle=_T("");
while((iPos=strData.find(strSepe,iPos))!=-1)
{
strSingle.erase(strSingle.begin(),strSingle.end());
strSingle.append(strData,/*strData.begin()+*/iPrePos,iPos-iPrePos);
if (bAllowDataEmpty)
{
strArray.push_back(strSingle);
}
else
{
if (strSingle.size()>0)
{
strArray.push_back(strSingle);
}
}
iPos+=strSepe.length();
iPrePos=iPos;
}
if (iPrePos<(int)(strData.size()))
{
strSingle.erase(strSingle.begin(),strSingle.end());
strSingle.append(strData,/*strData.begin()+*/iPrePos,strData.size()-iPrePos);
if (strSingle.size()>0)
{
strArray.push_back(strSingle);
}
}
};
//字符串的替換函數,STL STRING中沒有提供這樣的函數,類似CSTRING的函數,用起來很方便。
int ?replace(XString& src_str, ? const XString& old_str,const XString& new_str)
{
int ? count=0; ??
int ? old_str_len=old_str.length(),new_str_len=new_str.length(); ??
int ? pos=0; ??
while((pos=src_str.find(old_str,pos))!=-1) ??
{ ??
src_str.replace(pos,old_str_len,new_str); ??
pos+=new_str_len; ??
++count; ??
} ??
return ?count; ??
};
總結
以上是生活随笔為你收集整理的二进制查找替换常用函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件概要设计和详细设计的区别
- 下一篇: WINCE下的MINGW交叉编译环境下内