1、字符截取(含中英文)
利用api函数IsDBCSLeadByte(),非零为多字节的首字符,否则为单字节字符。例如:
if (IsDBCSLeadByte(str.GetAt(num)))
{
AfxMessageBox("该字节为多字节的首字符!"); //注:为真只表示是首字符集中的一个字符,不表示一定就是汉字的首字符,首字符中的字符也可以做汉字的第二个字节。
}
具体实现如下:
CString CTestStrCutDlg::GetLeftCut(CString str, int num)
{
CString strCut;
if (num > str.GetLength())
{
return str;
}
if (num > 0)
{
BOOL bCircle = FALSE,bNext = FALSE;
for(int i = 0 ;i<num;i++)
{
if (bCircle)
{
bCircle = FALSE;
continue;
}
if (IsDBCSLeadByte(str.GetAt(i)))
{
bCircle = TRUE;
if (i==num-1)
{
bNext = TRUE;
}
}
}
if (bNext)
{
strCut = str.Left(num-1);
}
else
{
strCut = str.Left(num);
}
}
return strCut;
}
2、字符分割
//分割函数,通过符号分割字符串
int SplitString(LPCTSTR lpszStr, //要分割的字符串
LPCTSTR lpszSplit, //分隔符
CStringArray& rArrString, //存储的数组
BOOL bAllowNullString) //
{
rArrString.RemoveAll();
CString szStr = lpszStr;
szStr.TrimLeft();
szStr.TrimRight();
if(szStr.GetLength()==0)
{
return 0;
}
CString szSplit = lpszSplit;
if(szSplit.GetLength() == 0)
{
rArrString.Add(szStr);
return 1;
}
CString s;
int n;
do {
n = szStr.Find(szSplit);
if(n > 0)
{
rArrString.Add(szStr.Left(n));
szStr = szStr.Right(szStr.GetLength()-n-szSplit.GetLength());
szStr.TrimLeft();
}
else if(n==0)
{
if(bAllowNullString)
rArrString.Add(_T(""));
szStr = szStr.Right(szStr.GetLength()-szSplit.GetLength());
szStr.TrimLeft();
}
else
{
if((szStr.GetLength()>0)||bAllowNullString)
rArrString.Add(szStr);
break;
}
} while(1);
return rArrString.GetSize();
}
3、字符拷贝
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_t count );