zoukankan      html  css  js  c++  java
  • C++: string的大小写转换

    C++: string的大小写转换
    转载 2014年12月02日 23:23:25 9806
    将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并没有提供这个方法。自己写个函数来实现,说起来挺简单,但做起来总让人觉得不方便。打个比方:早上起来想吃个汉堡,冰箱里有生牛肉,有面粉,也有微波炉,是可以自己做的,但是实在是太费事,没几个人愿意做。但是,打个电话给肯德基宅急送,10分钟后就有热乎乎的汉堡送上门了,大大节省了时间(时间就是金钱,你可以将时间用在更重要的开发工作上),并且味道也不差,何乐而不为呢?
    STL的algorithm库确实给我们提供了这样的便利,使用模板函数transform可以轻松解决这个问题,开发人员只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数。

    transform原型:
    [cpp] view plaincopy

    template < class InputIterator, class OutputIterator, class UnaryOperator >  
      OutputIterator transform ( InputIterator first1, InputIterator last1,  
                                 OutputIterator result, UnaryOperator op );  
    
    template < class InputIterator1, class InputIterator2,  
               class OutputIterator, class BinaryOperator >  
      OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,  
                                 InputIterator2 first2, OutputIterator result,  
                                 BinaryOperator binary_op );  
    [cpp] view plain copy
    template < class InputIterator, class OutputIterator, class UnaryOperator >  
      OutputIterator transform ( InputIterator first1, InputIterator last1,  
                                 OutputIterator result, UnaryOperator op );  
    
    template < class InputIterator1, class InputIterator2,  
               class OutputIterator, class BinaryOperator >  
      OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,  
                                 InputIterator2 first2, OutputIterator result,  
                                 BinaryOperator binary_op );  

    测试代码:
    [cpp] view plaincopy

    #include <string>  
    #include <algorithm>  
    using namespace std;  
    
    int main()  
    {  
        string strA = "yasaken@126.com";  
        string strB = "LURY@LENOVO.com";  
        printf("Before transform:
    ");  
        printf("strA:%s 
    ", strA.c_str());  
        printf("strB:%s 
    
    ", strB.c_str());  
    
        transform(strA.begin(), strA.end(), strA.begin(), ::toupper);  
        transform(strB.begin(), strB.end(), strB.begin(), ::toupper);  
        printf("After transform to toupper:
    ");  
        printf("strA:%s 
    ", strA.c_str());  
        printf("strB:%s 
    
    ", strB.c_str());  
    
        transform(strA.begin(), strA.end(), strA.begin(), ::tolower);  
        transform(strB.begin(), strB.end(), strB.begin(), ::tolower);  
        printf("After transform to lower:
    ");  
        printf("strA:%s 
    ", strA.c_str());  
        printf("strB:%s 
    
    ", strB.c_str());  
        return 0;  
    }  
    [cpp] view plain copy
    #include <string>  
    #include <algorithm>  
    using namespace std;  
    
    int main()  
    {  
        string strA = "yasaken@126.com";  
        string strB = "LURY@LENOVO.com";  
        printf("Before transform:
    ");  
        printf("strA:%s 
    ", strA.c_str());  
        printf("strB:%s 
    
    ", strB.c_str());  
    
        transform(strA.begin(), strA.end(), strA.begin(), ::toupper);  
        transform(strB.begin(), strB.end(), strB.begin(), ::toupper);  
        printf("After transform to toupper:
    ");  
        printf("strA:%s 
    ", strA.c_str());  
        printf("strB:%s 
    
    ", strB.c_str());  
    
        transform(strA.begin(), strA.end(), strA.begin(), ::tolower);  
        transform(strB.begin(), strB.end(), strB.begin(), ::tolower);  
        printf("After transform to lower:
    ");  
        printf("strA:%s 
    ", strA.c_str());  
        printf("strB:%s 
    
    ", strB.c_str());  
        return 0;  
    }  

    运行结果:
    [cpp] view plaincopy

    strA:yasaken@126.com   
    strB:LURY@LENOVO.com   
    
    After transform to toupper:  
    strA:YASAKEN@126.COM   
    strB:LURY@LENOVO.COM   
    
    After transform to lower:  
    strA:yasaken@126.com   
    strB:lury@lenovo.com   
    [cpp] view plain copy
    strA:yasaken@126.com   
    strB:LURY@LENOVO.com   
    
    After transform to toupper:  
    strA:YASAKEN@126.COM   
    strB:LURY@LENOVO.COM   
    
    After transform to lower:  
    strA:yasaken@126.com   
    strB:lury@lenovo.com   

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

  • 相关阅读:
    G450 Ubuntu14 无线网卡解决
    USB设备不能用。提示Windows 无法启动这个硬件设备。 (代码 19)
    帮你选处理器:CPU T9500-p9500-T9400-T9300-p8700对比分析!
    全球各大运营商黑莓ROM官网下载链接汇总
    查看80端口被占用的方法(IIS、apmserv、system)
    Windows 2003 服务器安全设置-批处理 (附参考链接)
    解决Windows时间同步失败问题!系统时间同步设置!
    WinHTTP Web Proxy Auto-Discovery Service
    关于“未使用GUID分区表”无法安装的解决方案
    DataGridView使用技巧六:冻结列或行
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457617.html
Copyright © 2011-2022 走看看