这个函数非常很有用,用它可以从串表资源中的子串,还可以从Windows控件(如标准的"File Open"对话框)中解析出特定的字符串,如多选文件名等。
在MFC的AppWizard工程中一般都要创建一个名为IDR_MAINFRAME的串资源,它包含很多有用的信息,如应用程序名、文档类型的名字,或者默认文档类型的文件扩展名--专门用于"File Open/Save"对话框。下面是一个用AfxExtractSubString()解析信息串的例子:
CString Fullstring, Appname, Fileext;
Fullstring.LoadString(IDR_MAINFRAME);
//获取完整的分割串
AfxExtractSubString(Appname, Fullstring, 0, '/n');
//析出第一个子串
AfxExtractSubString(Fileext, Fullstring, 4, '/n');
//析出第四个子串
使用这个函数可以避免因为自己写的解析代码而可能出现的错误。
CString str = "123,456,789";
CString output = "";
for (int i=0; i<3; i++)
{
AfxExtractSubString(output, str, i, ',');
AfxMessageBox(output);
}
参数1:用来存放你取出的子串
参数2:要拆分的整个字符串
参数3:你要取的子字符串位置,从0开始
参数4:特定字符
VC下的Split函数熟悉VB代码的朋友应该都极度喜欢Split函数,因为实在太方便了,自动帮你把字符串按照要求拆分,一直以为VC++没有相关的函数,今天重写看了一下VC++相关文章,发现一个没有在VC++文档公布的函数AfxExtractSubString,基本上与Split有异曲同工之效,就是不明白微软为什么把他隐藏起来了。。。 BOOL AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,int iSubString, TCHAR chSep = '/n') 参数说明: rString 得到的字符串;lpszFullString 待分割的字符串;iSubString 要得到第几个字符串;chSep 个子串之间的分隔符,默认是回车; 返回值为Flase表示iSubString 越界,否则分隔成功 例如,有一个字符串strFullString = "abcd-hgdy-weiuiwu-sdlsk";则有: CString strTmp; AfxExtractSubString( strTmp, (LPCTSTR)strFullString, 0, '-');//strTmp的内容为abcd AfxExtractSubString( strTmp, (LPCTSTR)strFullString, 2, '-');//strTmp的内容为weiuiwu 感觉蛮好用的,但是有两个限制: 1.仅仅能在MFC下使用的函数 2.分隔只能使用字符,不能使用字符串。