transform 进行大小写转换

最近在编程的时候自己写了一个大小写转换的函数,结果写完之后在网上看了看人家的类似实现,发现感触很深,C++的用法真是博大精深啊!

一搬而言进行大小写转换会采用如下用法:

#include <cctype>
#include <string>
using namespace std;
int main()
{
   string s="hello";
    for (int j=0; j<s.length(); ++j)
  {
     s[j]=toupper(s[j]);
   }

}

利用了C类型的字符串处理方式,来逐个处理string内的字符。

此时如果利用了STL算法中的transform后问题就变的比较简单了,而且更具有通用性:

#include <cctype>
#include <string>
#include <algorithm>
using namespace std;
string s="hello";
transform(s.begin(), s.end(), s.begin(), toupper);

鉴于此我进行了如下封装,封装了如下大小写转换的函数:

 //将string转换为大写形式
 static bool Str2CapitalCase( std::string& str2Convert )
 {
  transform( str2Convert.begin(), str2Convert.end(), str2Convert.begin(), toupper );
  return true;
 }
 //将string转化为小写形式
 static bool Str2SmallCase( std::string& str2Convert )
 {
  transform( str2Convert.begin(), str2Convert.end(), str2Convert.begin(), tolower );
  return true;
 }

而且更进一步可以将这两个函数合二为一,通过标志来指定到底来调用哪一个函数来进行转换:

//通过用户指定的形式转换为相应的大小写形式

 typedef int (*pf)(int);
 static bool Str2SpecifiyCase( std::string& str2Convert, bool bFlag = false )
 {
  pf Pfun = tolower;
  //缺省情况下为小写
  if( true == bFlag )
  {
   Pfun = toupper;
  }
  //进行转换
  transform( str2Convert.begin(), str2Convert.end(), str2Convert.begin(), Pfun );
  return true;
 }

更进一步可以通过模板技术进行修改

template<class T>

bool Str2SpecifiyCase( T& t, bool bFlag = true )

{

 pf Pfun = tolower;
  //缺省情况下为小写
  if( true == bFlag )
  {
   Pfun = toupper;
  }
  //进行转换
  transform( t.begin(), t.end(), t.begin(), Pfun );
  return true;

}
c++真是强大!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值