C++: string的大小写转换

来源:互联网 发布:一知f君张碧晨 编辑:程序博客网 时间:2024/06/08 01:36
      将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并没有提供这个方法。自己写个函数来实现,说起来挺简单,但做起来总让人觉得不方便。打个比方:早上起来想吃个汉堡,冰箱里有生牛肉,有面粉,也有微波炉,是可以自己做的,但是实在是太费事,没几个人愿意做。但是,打个电话给肯德基宅急送,10分钟后就有热乎乎的汉堡送上门了,大大节省了时间(时间就是金钱,你可以将时间用在更重要的开发工作上),并且味道也不差,何乐而不为呢?

       STL的algorithm库确实给我们提供了这样的便利,使用模板函数transform可以轻松解决这个问题,开发人员只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数。


transform原型:

[cpp] view plaincopyprint?
  1. template < class InputIterator, class OutputIterator, class UnaryOperator >  
  2.   OutputIterator transform ( InputIterator first1, InputIterator last1,  
  3.                              OutputIterator result, UnaryOperator op );  
  4.   
  5. template < class InputIterator1, class InputIterator2,  
  6.            class OutputIterator, class BinaryOperator >  
  7.   OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,  
  8.                              InputIterator2 first2, OutputIterator result,  
  9.                              BinaryOperator binary_op );  

测试代码:

[cpp] view plaincopyprint?
  1. #include <string>  
  2. #include <algorithm>  
  3. using namespace std;  
  4.   
  5. int main()  
  6. {  
  7.     string strA = "yasaken@126.com";  
  8.     string strB = "LURY@LENOVO.com";  
  9.     printf("Before transform:\n");  
  10.     printf("strA:%s \n", strA.c_str());  
  11.     printf("strB:%s \n\n", strB.c_str());  
  12.   
  13.     transform(strA.begin(), strA.end(), strA.begin(), ::toupper);  
  14.     transform(strB.begin(), strB.end(), strB.begin(), ::toupper);  
  15.     printf("After transform to toupper:\n");  
  16.     printf("strA:%s \n", strA.c_str());  
  17.     printf("strB:%s \n\n", strB.c_str());  
  18.   
  19.     transform(strA.begin(), strA.end(), strA.begin(), ::tolower);  
  20.     transform(strB.begin(), strB.end(), strB.begin(), ::tolower);  
  21.     printf("After transform to lower:\n");  
  22.     printf("strA:%s \n", strA.c_str());  
  23.     printf("strB:%s \n\n", strB.c_str());  
  24.     return 0;  
  25. }  

运行结果:

[cpp] view plaincopyprint?
  1. strA:yasaken@126.com   
  2. strB:LURY@LENOVO.com   
  3.   
  4. After transform to toupper:  
  5. strA:YASAKEN@126.COM   
  6. strB:LURY@LENOVO.COM   
  7.   
  8. After transform to lower:  
  9. strA:yasaken@126.com   
  10. strB:lury@lenovo.com   

最后补一句:STL algorithm功能实在是太强劲了,非常推荐。
0 0