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


    今天写了一个小例子,把字符串里面的所有小写字母全部转换成大写字母
    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);
     
  • 相关阅读:
    北邮ivi测试频道 26个高清频道 IPv4 有PC端和移动端地址
    Nginx+ffmpeg+ckplayer海康监控摄像头在web页面播放RTSP转RTMP
    Vlc播放RTSP
    [RTSP]WPF用VLC显示RTSP视频
    WPF 使用 VLC 3.0.10 的基本操作
    【矩阵专题】——矩阵快速幂
    1120:同行列对角线的格
    1120:同行列对角线的格
    1120:同行列对角线的格
    1119:矩阵交换行
  • 原文地址:https://www.cnblogs.com/silentNight/p/5406072.html
Copyright © 2020-2023  润新知