扩展std string功能的几个做法

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

作者:朱金灿
来源:http://blog.csdn.net/clever101/


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


  1. /*! 
  2. *  /brief 将字符串中的大写字母变为小写。 
  3. * 
  4. *  /param SrcString [in&out]源字符串。 
  5. *  /return 无。 
  6. */  
  7. static void string_ToLower(string &SrcString)  
  8. {  
  9.     for (string::iterator i = SrcString.begin(); i != SrcString.end(); i++)  
  10.         if (*i >= 'A' && *i <= 'Z')  
  11.             *i = (*i) + ('a' - 'A');  
  12. }  
  13. /*! 
  14. *  /brief 将字符串中的小写字母变为大写。 
  15. * 
  16. *  /param SrcString [in&out]源字符串。 
  17. *  /return 无。 
  18. */  
  19. static void string_ToUpper(string &SrcString)  
  20. {  
  21.     for (string::iterator i = SrcString.begin(); i != SrcString.end(); i++)  
  22.         if (*i >= 'a' && *i <= 'z')  
  23.             *i = (*i) - ('a' - 'A');  
  24. }  
/*!*  /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');} 


扫描二维码关注公众号,回复: 4969517 查看本文章


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


  1. #include <sstream>  
  2.   TCHAR szName[] = _T("Windows");  
  3.   int nWidth = 100;  
  4.   int nHeight= 100;  
  5.   float fArea = 10000.7;  
  6.   std::ostringstream stm;  
  7.   std::string strResult;  
  8.   stm <<_T("窗口名称:")<<szName <<_T(",长为")<< nWidth << _T(",高为") << nHeight<<_T(",面积为")<<fArea;  
  9.   strResult = stm.str();  
  10.   std::cout<<strResult<<std::endl;   
#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,具体如下例:


  1. #include  "boost/format.hpp"  
  2.   int nAge = 15;  
  3.   TCHAR szAddress[] = _T("广州");  
  4.   string strResult2 = boost::str(boost::format("我今年%d岁,住在%s")%nAge%szAddress);  
#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。我个人感觉似乎不必使用一个派生类,需要哪个功能就单独用一个静态函数似乎更为灵活。






           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/gdruhv/article/details/84195700