首页 > 代码库 > 字符串的截取
字符串的截取
一、在字符串中取字符
CString str="12 34 56 78";
str.Left(1);
str.Left(2);
str.Right(1);
str.Righr(3);
str.Mid(4,2);
二、在字符串中查找特定字符
CString str="123@abc";
int pos=str.Find("@");
if(pos!=-1){
str.Insert(pos,‘#‘);
}
三、字符串的拆分
1、AfxExtractSubString函数
BOOL AfxExtractSubString(
CString& rString, //取到的字符串
LPCTSTR lpszFullString, //要拆分的字符串
int iSubString, //要提取的子字符串的位置,从0开始
TCHAR chSep=’\n’ //分隔符,默认为\n
)
须包含头文件:#include <afxwin.h>
例:
CString strOrg=_T(“192.168.0.1”);
CString strGet1="";
CString strOut1="";
int i=0;
while(AfxExtractSubString(strGet1,strOrg,i,‘.‘)){
strOut1+=strGet1+"\r\n";
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:分割结果字符串数组
字符串的截取