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:\n");  
    printf("strA:%s \n", strA.c_str());  
    printf("strB:%s \n\n", strB.c_str());  

    transform(strA.begin(), strA.end(), strA.begin(), ::toupper);  
    transform(strB.begin(), strB.end(), strB.begin(), ::toupper);  
    printf("After transform to toupper:\n");  
    printf("strA:%s \n", strA.c_str());  
    printf("strB:%s \n\n", strB.c_str());  

    transform(strA.begin(), strA.end(), strA.begin(), ::tolower);  
    transform(strB.begin(), strB.end(), strB.begin(), ::tolower);  
    printf("After transform to lower:\n");  
    printf("strA:%s \n", strA.c_str());  
    printf("strB:%s \n\n", 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:\n");  
    printf("strA:%s \n", strA.c_str());  
    printf("strB:%s \n\n", strB.c_str());  

    transform(strA.begin(), strA.end(), strA.begin(), ::toupper);  
    transform(strB.begin(), strB.end(), strB.begin(), ::toupper);  
    printf("After transform to toupper:\n");  
    printf("strA:%s \n", strA.c_str());  
    printf("strB:%s \n\n", strB.c_str());  

    transform(strA.begin(), strA.end(), strA.begin(), ::tolower);  
    transform(strB.begin(), strB.end(), strB.begin(), ::tolower);  
    printf("After transform to lower:\n");  
    printf("strA:%s \n", strA.c_str());  
    printf("strB:%s \n\n", 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功能实在是太强劲了,非常推荐。

posted @   机智的程序员小熊  阅读(235)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示