转载自https://www.cnblogs.com/balingybj/p/4678850.html
将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这个方法。自己写个函数来实现,说起来挺简单,但做起来总让人觉得不方便。打个比方:早上起来想吃个汉堡,冰箱里有生牛肉,有面粉,也有微波炉, 是可以自己做的,但是实在是太费事,没几个人愿意做。但是,打个电话给肯德基宅急送,10分钟后就有热乎乎的汉堡送上门了,大大节省了时间(时间就是金 钱,你可以将时间用在更重要的开发工作上),并且味道也不差,何乐而不为呢?
STL的algorithm库确实给我们提供了这样的便利,使用模板函数transform可以轻松解决这个问题,开发人员只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数。
transform原型:
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 );
测试代码:
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: "); 10 printf("strA:%s ", strA.c_str()); 11 printf("strB:%s ", 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: "); 16 printf("strA:%s ", strA.c_str()); 17 printf("strB:%s ", 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: "); 22 printf("strA:%s ", strA.c_str()); 23 printf("strB:%s ", strB.c_str()); 24 return 0; 25 }
运行结果:
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