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;
法二:利用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。