中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > JavaScripts > 综合文章
MFC中几个有用的字符串操作函数
作者:佚名 时间:2005-02-24 11:03 出处:互连网 责编:chinaitpower
              摘要:MFC中几个有用的字符串操作函数

// 功能 :    格式化字符串
// 参数 :    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(*pchSrc))                    // *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;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有