作者:朱金灿
来源:http://blog.csdn.net/clever101/
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。具体用法参考:Boost 库之format的使用 。
另外网上有人基于std::string实现了一个ext_string,提供一些常用的功能,例如:
1. 定义分隔符。给定分隔符,把string分为几个字段。
2. 提供替换功能。例如,用winter, 替换字符串中的wende
3. 大小写处理。例如,忽略大小写比较,转换等
4. 整形转换。例如把"123"字符串转换为123数字。
具体你可以看看:Extended STL string 。我个人感觉似乎不必使用一个派生类,需要哪个功能就单独用一个静态函数似乎更为灵活。