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;
}
/////////////////////////////////////////////////
////////////////////////////////////////////////
///
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 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器