选择显示字体大小

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

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')) )
{
// &#37;a comes after &#37;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] == '&#37;' &&
( (pchsrc[1] >= '0' && pchsrc[1] <= '9')
(pchsrc[1] >= 'a' && pchsrc[1] <= 'z')) )
{
// &#37;a comes after &#37;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 &#37;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;
}
/////////////////////////////////////////////////
////////////////////////////////////////////////
///


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons