c++字符串大小写转换

  字符串转换大小写是一个常用的功能,今天就简单总结下C++中常用转换的方法(由于ANSI和Unicode在函数名上有差别,故都列出来):

 

【1.用C语言标准库函数toupper,tolower】
头文件:cctype   c下面:ctype.h

转大写
 Ansi版:   int toupper(int c);

 Unicode版: int towupper(wint_t c);
 MSDN: toupper, _toupper, towupper, _toupper_l, _towupper_l

 

转小写:
 Ansi版:   int tolower(int c );

 Unicode版: int towlower( wint_t c );

 MSDN:tolower

 

缺陷:只能转换单个字符

 

Example:

    WCHAR wch = 'a';
    wch = towupper(wch); // A

 

【2.用C++语言标准库函数_strlwr_s, _strupr_s】
注意:要使用安全的字符串函数,不要用_strlwr。
头文件:string.h

转小写:
 Ansi:    errno_t _strlwr_s( char *str,size_t numberOfElements);

 Unicode版: errno_t _wcslwr_s(wchar_t *str,size_t numberOfElements);

 注意:numberOfElements 要加上最后NULL字符长度,即numberOfElements = strlen(str) + 1;

 MSDN:http://msdn.microsoft.com/en-us/library/y889wzfw(VS.80).aspx

 

转大写:
 Ansi:    errno_t _strupr_s(char *str,size_t numberOfElements);

 Unicode版: errno_t _wcsupr_s(wchar_t * str,size_t numberOfElements);

 MSDN: http://msdn.microsoft.com/en-us/library/sae941fh(VS.80).aspx

 

Example:

    WCHAR wideStr[] = L"Abc";
    _wcslwr_s(wideStr, wcslen(wideStr) + 1); // abc
    _wcsupr_s(wideStr, wcslen(wideStr) + 1);// ABC

 

【3.std::string 转换大小写】
  很遗憾,std::string 没有提供大小写转换的功能,所以只能用STL中的transform结合toupper/tolower完成。
头文件: string, cctype,algorithm

转小写
 Ansi:    transform(str.begin(),str.end(),str.begin(),tolower);
 Unicode版: transform(wstr.begin(), wstr.end(), wstr.begin(), towlower);

转大写
 Ansi:    transform(s.begin(), s.end(), s.begin(), toupper);
 Unicode版: transform(wstr.begin(), wstr.end(), wstr.begin(), towupper);

 

Example:
    wstring wstr =L"Abc";
    transform(wstr.begin(), wstr.end(), wstr.begin(), towupper);

 

【4.boost库中string_algorithm 提供了大小写转换函数to_lower 和 to_upper】

Example:
 #include <boost/algorithm/string.hpp>   
 using namespace std;   
 using namespace boost;

 wstring wstr =L"Abc";
 boost::to_lower(wstr); // abc

 

====================================================================
附完整Example

 

代码
/* *
* @file     test.cpp
* @brief    字符大小写转换
* @author   greenerycn@gmail.com
* @date     2009-7-1
*/  

#include 
" stdafx.h "
#include 
< cstring >
#include 
< windows.h >
#include 
< cctype >
#include 
< algorithm >
#include 
" boost/algorithm/string.hpp "
using   namespace  std; 

int  wmain( int  argc, WCHAR *  argv[])
{
    
char  ch  =   ' a ' ;
    ch 
=  toupper(ch); 

    WCHAR wch 
=   ' a ' ;
    wch 
=  towupper(wch); 

    WCHAR wideStr[] 
=  L " Abc " ;
    _wcslwr_s(wideStr, wcslen(wideStr) 
+   1 ); 

    _wcsupr_s(wideStr, wcslen(wideStr) 
+   1 ); 

    wstring wstr 
= L " Abc " ;
    transform(wstr.begin(), wstr.end(), wstr.begin(), towupper); 

    boost::to_lower(wstr); 

    
return   0 ;

转帖:http://www.cnblogs.com/Lynn_doo/articles/1663923.html

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值