网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.很普通很普通的猜数字游戏.
.骑士漫游和八皇后.
.Win2K/NT下屏蔽Ctrl+Alt+Del的响.
.C++箴言:理解Terminology术语.
.5.  运算符.
.将文件或目录删除到回改站.
.JAVA与C++::关于JNI中文字符串操.
.在程序中重启自己的一种方法.
.深度探索C++对象模型(完结篇).
.用C++制作自己的游戏修改器(下).
.谈谈CGI的开发.
.修练8年C++面向对象程序设计之体.
.C++对象计数.
.二级指针.
.学生成绩管理系统实习.
.Delphi中带缓存的数据更新技术.
.CB设置环境选项设置.
.2001年4月全国计算机等级考试二级.
.用C++访问SQL Server 2000.
.技巧:在C/C++中如何构造通用的对.

MFC中几个有用的字符串操作函数

发表日期:2008-3-8


MFC中有几个字符串操作函数很有用,但有的在MSDN中都查不到,因为MSDN没有公布。下面我们来看看它们的用法和声明及定义等。

// 功能 : 格式化字符串
// 参数 : rString - 输出参数,格式化后的字符串将保存在此字符串中
// nIDS - 将进行替换操作的格式字符串的资源ID
// lpsz1 - 指向将替换格式字符串中“%1”字符的字符串
// lpsz2 - 指向将替换格式字符串中“%2”字符的字符串
void AFXAPI AfxFormatString1(CString& rString, UINT nIDS, LPCTSTR lpsz1);
void AFXAPI AfxFormatString2(CString& rString, UINT nIDS, LPCTSTR lpsz1, LPCTSTR lpsz2);
// Implementation string helpers
void AFXAPI AfxFormatStrings(CString& rString, UINT nIDS, LPCTSTR const* rglpsz, int nString);
void AFXAPI AfxFormatStrings(CString& rString, LPCTSTR lpszFormat, LPCTSTR const* rglpsz, int nString);
// 功能 : 获取子字符串
// 参数 : rString - 输出参数,保存子字符串
// lpszFullString - 源字符串
// iSubString - 子字符串索引,从0开始计数
// chSep - 子字符串间的分隔字符,默认为'\n'
BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n');
/////////////////////////////////////////////////
////////////////////////////////////////////////
///
// Strings in format ".....%1 .... %2 ...." etc. void AFXAPI AfxFormatStrings(CString& rString, UINT nIDS,
LPCTSTR const* rglpsz, int nString)
{
TCHAR szFormat[256];
if (!AfxLoadString(nIDS, szFormat) != 0)
{
TRACE1("Error: failed to load AfxFormatString string 0x%04x.\n", nIDS);
ASSERT(FALSE);
return;
}
AfxFormatStrings(rString, szFormat, rglpsz, nString);
}

void AFXAPI AfxFormatStrings(CString& rString, LPCTSTR lpszFormat,
LPCTSTR const* rglpsz, int nString)
{
// 计算结果字符串的长度
int nTotalLen = 0;
LPCTSTR pchSrc = lpszFormat;
while (*pchSrc != '\0')
{
if (pchSrc[0] == '%' &&
( (pchSrc[1] >= '0' && pchSrc[1] <= '9')
(pchSrc[1] >= 'A' && pchSrc[1] <= 'Z')) )
{
// %A comes after %9 -- we'll need it someday
int i;
if (pchSrc[1] >'9')
i = 9 + (pchSrc[1] - 'A');
else
i = pchSrc[1] - '1';
pchSrc += 2;
if (i >= nString)
++nTotalLen;
else if (rglpsz[i] != NULL)
nTotalLen += lstrlen(rglpsz[i]);
}
else
{
if (_istlead(*pchSrc))
++nTotalLen, ++pchSrc;
++pchSrc;
++nTotalLen;
}
}

pchSrc = lpszFormat;
LPTSTR pchDest = rString.GetBuffer(nTotalLen);
while (*pchSrc != '\0')
{
if (pchSrc[0] == '%' &&
( (pchSrc[1] >= '0' && pchSrc[1] <= '9')
(pchSrc[1] >= 'A' && pchSrc[1] <= 'Z')) )
{
// %A comes after %9 -- we'll need it someday
int i;
if (pchSrc[1] >'9')
i = 9 + (pchSrc[1] - 'A');
else
i = pchSrc[1] - '1';

pchSrc += 2;
if (i >= nString)
{
TRACE1("Error: illegal string index requested %d.\n", i);
*pchDest++ = '?';
}
else if (rglpsz[i] != NULL)
{
lstrcpy(pchDest, rglpsz[i]);
pchDest += lstrlen(pchDest);
}
}
else
{
if (_istlead(*pchSr
c)) // *pchSrc是否多字节字符的首字节
*pchDest++ = *pchSrc++; // 拷贝首字节
*pchDest++ = *pchSrc++;
}
}
rString.ReleaseBuffer((int)((LPCTSTR)pchDest - (LPCTSTR)rString));
// ReleaseBuffer will assert if we went too far
}

void AFXAPI AfxFormatString1(CString& rString, UINT nIDS, LPCTSTR lpsz1)
{
AfxFormatStrings(rString, nIDS, &lpsz1, 1);
}

void AFXAPI AfxFormatString2(CString& rString, UINT nIDS, LPCTSTR lpsz1,
LPCTSTR lpsz2)
{
LPCTSTR rglpsz[2];
rglpsz[0] = lpsz1;
rglpsz[1] = lpsz2;
AfxFormatStrings(rString, nIDS, rglpsz, 2);
}

BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,
int iSubString, TCHAR chSep)
{
if (lpszFullString == NULL)
return FALSE;

while (iSubString--)
{
lpszFullString = _tcschr(lpszFullString, chSep);
if (lpszFullString == NULL)
{
rString.Empty(); // return empty string as well
return FALSE;
}
lpszFullString++; // point past the separator
}
LPCTSTR lpchEnd = _tcschr(lpszFullString, chSep);
int nLen = (lpchEnd == NULL) ? lstrlen(lpszFullString) : (int)(lpchEnd - lpszFullString);
ASSERT(nLen >= 0);
memcpy(rString.GetBufferSetLength(nLen), lpszFullString, nLen*sizeof(TCHAR));
return TRUE;
}
/////////////////////////////////////////////////
////////////////////////////////////////////////
///

上一篇:C++/CLR泛型与C++模板的对比 人气:529
下一篇:送给正在学习C++的朋友 人气:555
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐