码迷,mamicode.com
首页 > 其他好文 > 详细

把一个string串的所有小写字母转成大写字母的例子来看看看全局函数的使用

时间:2016-04-18 23:50:20      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

今天写了一个小例子,把字符串里面的所有小写字母全部转换成大写字母
http://blog.csdn.net/yasaken/article/details/7303903

1
#include "stdafx.h" 2 #include <string> 3 #include <algorithm> 4 #include <iostream> 5 6 using namespace std; 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 string strA = "123@456$abc"; 11 transform(strA.begin(), strA.end(), strA.begin(), ::toupper); //当时一直没明白为什么toupper前面要加:: 12 cout<<strA<<endl; 13 getchar(); 14 return 0; 15 }
如果没有 上面 using namespace std; 这句话 
transform(strA.begin(), strA.end(), strA.begin(), ::toupper);和transform(strA.begin(), strA.end(), strA.begin(), toupper); 都可以编译通过

从网上找了个讲解的例子http://blog.sina.com.cn/s/blog_48d5933f0100riz5.html

标准库重载了一个toupper函数,而GCC完全由c库去提供重载, 而glibc做不到这一点,所以在编译的时候g++就认为这个函数有歧义了.下面是标准库中toupper函数的两种形式
int std::toupper(int); //from <cctype>
template<class charT>
charT std::toupper(charT, const local&); //from <locale>
此时有三种解决办法:
第一种 包装函数-->只有在包装函数中指明要使用的函数,歧义自然就没了
Int toUpper(int c)
{
return toupper(c);
}
第二种 强制转化--->将toupper转换为一个返回值是int,参数只有一个int的函数指针
std::transform(s.begin(), s.end(), s.begin(), (int(*)(int)) toupper);
第三种 GCC中将toupper实现为一个宏而不是函数,而在全局命名空间中有实现的函数(而不是宏), 所以我们明确命名空间,这并不总是奏效,但是我我的g++环境中没有这个问题
transform(s.begin(), s.end(), s.begin(), ::toupper);

 再附带一个小例子

技术分享


现在我们来看看 transform函数, 开发人员只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数
template < class InputIterator, class OutputIteror, 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, InputIterator2 last1, InputIterator2 first2, OutputIterator result, BinaryOperator binary_op);

 

 

把一个string串的所有小写字母转成大写字母的例子来看看看全局函数的使用

标签:

原文地址:http://www.cnblogs.com/silentNight/p/5406072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!