现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

扩展std::string功能的几个做法

2012-07-13 22:05 工业·编程 ⁄ 共 1206字 ⁄ 字号 暂无评论

std::string毫无疑问是一个很强大的字符串类,但比起MFC的CString类,也存在一些不足,比如字符串的大小写转换以及格式化字符串。这次我介绍一下std::string大小写转换的两个函数以及格式化std::string的两种做法。

/*!
*  /brief 将字符串中的大写字母变为小写。
*
*  /param SrcString [in&out]源字符串。
*  /return 无。
*/
static void string_ToLower(string &SrcString)
{
    for (string::iterator i = SrcString.begin(); i != SrcString.end(); i++)
        if (*i >= 'A' && *i <= 'Z')
            *i = (*i) + ('a' - 'A');
}
/*!
*  /brief 将字符串中的小写字母变为大写。
*
*  /param SrcString [in&out]源字符串。
*  /return 无。
*/
static void string_ToUpper(string &SrcString)
{
    for (string::iterator i = SrcString.begin(); i != SrcString.end(); i++)
        if (*i >= 'a' && *i <= 'z')
            *i = (*i) - ('a' - 'A');
}

CString中的format函数让人使用起来非常舒服。std::string如何实现格式化字符串呢?通过搜索网上资料,我找到了两种办法:
法一:利用std::ostringstream类,具体做法如下例:

#include <sstream>
  TCHAR szName[] = _T("Windows");
  int nWidth = 100;
  int nHeight= 100;
  float fArea = 10000.7;
  std::ostringstream stm;
  std::string strResult;
  stm <<_T("窗口名称:")<<szName <<_T(",长为")<< nWidth << _T(",高为") << nHeight<<_T(",面积为")<<fArea;
  strResult = stm.str();
  std::cout<<strResult<<std::endl;&nbsp;
法二:利用Boost Format library,具体如下例:

#include  "boost/format.hpp"
  int nAge = 15;
  TCHAR szAddress[] = _T("广州");
  string strResult2 = boost::str(boost::format("我今年%d岁,住在%s")%nAge%szAddress);
boost::format的基本语法结构为:format(需要格式化的字符串 ) %参数1 %参数2 ...%参数n。

给我留言

留言无头像?