一、在字符串中取字符
CString str="12 34 56 78";
str.Left(1); //"1"
str.Left(2); //"12"
str.Right(1); //"8"
str.Righr(3); //" 78"
str.Mid(4,2); //"4 "
二、在字符串中查找、替换特定字符
1、int Find(str[,nStart]) 在一段字符串中查找字符或字符串,返回其在该段字符串中的索引值,失败返回-1;nStart默认为0从头开始索引,若不为0则位于nStart索引前的字符不在搜索范围内
CString str="123@abc";
int pos=str.Find("@");
if(pos!=-1){
str.Insert(pos,'#');
}
int num=str.Replace("3@a","##"); //被替换了num个字符
2、ReverseFind(str) 在一段字符串中搜索某字符,返回在该段字符串中与之匹配的最后一个字符的索引值,失败返回-1
CString strPath="C:Program FilesGooglezwq.dll";
int nPos=strPath.ReverseFind(_T('\'));
CString strExePath;
strExePath=strPath.Left(nPos+1); //"C:Program FilesGoogle"
三、去除字符串首尾的指定字符
CString str=" i love you, you konw ? ";
str=str.Trim(); //删除字符串头部及尾部出现的空格,删除的过程为从外到内直到碰到一个非空格的字符为止,所以不管前后有多少个连续的空格都会被删除掉
str=str.TrimStart(); //删除字符串的头部的空格
str=str.TrimEnd(); //删除字符串尾部的空格
str=str.Trim("abc".ToCharArray()); //删除字符串头部及尾部出现的a或b或c字符,删除的过程直到碰到一个既不是a也不是b也不是c的字符才结束
str=str.TrimEnd("o yu?".ToCharArray()); //" i love you, you konw"
四、字符串的拆分
1、AfxExtractSubString函数
BOOL AfxExtractSubString(
CString& rString, //取到的字符串
LPCTSTR lpszFullString, //要拆分的字符串
int iSubString, //要提取的子字符串的位置,从0开始
TCHAR chSep=’ ’ //分隔符,默认为
)
须包含头文件:#include <afxwin.h>
例:
CString strOrg=_T(“192.168.0.1”);
CString strGet1="";
CString strOut1="";
int i=0;
while(AfxExtractSubString(strGet1,strOrg,i,'.')){
strOut1+=strGet1+" ";
i++;
}
SetDlgItemText(IDC_EDIT1,strOut1);
注意:如果出现连续的分隔符,比如字符串1|2||||3 ,用AfxExtractSubString得到的是1 2 空字符串 空字符串 空字符串 3
2、strtok函数
char *strtok( char *strToken, const char *strDelimit );
strToken: 目标字符串
strDelimit: 分隔符
须包含头文件:#include <string.h>
例:
CString strOrg=_T(“192.168.0.1”);
TCHAR seps[]=_T(".");
TCHAR* strGet=strtok((LPTSTR)(LPCTSTR)strOrg,seps);
AfxMessageBox(strGet); //192
strGet= strtok (NULL,seps); //指针下移一位
AfxMessageBox(strGet); //168
strGet= strtok (NULL,seps);
AfxMessageBox(strGet); //0
strGet= strtok (NULL,seps);
AfxMessageBox(strGet); //1
strGet= strtok (NULL,seps);
If(strGet==NULL){
AfxMessageBox(“没有了”);
}
注意:strtok允许多分割字符,比如空格+逗号表示为’ ,’ ,还有一点需要注意的是如果被分割的字符第一个是分割符,那么该字符会被忽略掉,如果出现连续的分隔符,那么也会忽略掉,比如字符串1|2||||3,用strtok来分割将得到1 2 3
3、_tcstok函数
char* _tcstok( char* strToken, const char* strDelimit );
strToken: 目标字符串
strDelimit: 分隔符
须包含头文件:#include <TCHAR.H>
例:使用方法和strtok函数相同
CString strOrg=_T(“192.168.0.1”);
TCHAR seps[]=_T(".");
TCHAR* strGet=_tcstok((LPTSTR)(LPCTSTR)strOrg,seps);
AfxMessageBox(strGet); //192
strGet=_tcstok(NULL,seps); //指针下移一位
AfxMessageBox(strGet); //168
strGet=_tcstok(NULL,seps);
AfxMessageBox(strGet); //0
strGet=_tcstok(NULL,seps);
AfxMessageBox(strGet); //1
strGet=_tcstok(NULL,seps);
If(strGet==NULL){
AfxMessageBox(“没有了”);
}
4、自定义分割函数
void Split(CString source, CString divKey, CStringArray& dest)
{
dest.RemoveAll();
int pos = 0;
int pre_pos = 0;
while( -1 != pos ){
pre_pos = pos;
pos = source.Find(divKey,(pos+1));
dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
}
}
参数:
source:待分割的源串
divKey:分割符
dest:分割结果字符串数组