zoukankan      html  css  js  c++  java
  • string大小写转换函数

    string大小写转换函数 - 流水不争先 - 博客频道 - CSDN.NET

    string大小写转换函数

    分类: C/C++/C# 1495人阅读 评论(0) 收藏 举报

    最近被多线程+野指针折磨ING……

        C++中没有string直接转换大小写的函数,需要自己实现。一般来讲,可以用stl的algorithm实现:

    #include <iostream>
    #include <cctype>
    #include <string>
    #include <algorithm>

    using namespace std;

    int main()
    {
        string s = "ddkfjsldjl";
        transform(s.begin(), s.end(), s.begin(), toupper);
        cout<<s<<endl;
        return 0;
    }


        但在使用g++编译时会报错:
    对 ‘transform(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unresolved overloaded function type>)’ 的调用没有匹配的函数。
        这里出现错误的原因是Linux将toupper实现为一个宏而不是函数
    /usr/lib/syslinux/com32/include/ctype.h:

    /* Note: this is decimal, not hex, to avoid accidental promotion to unsigned */
    #define _toupper(__c) ((__c) & ~32)
    #define _tolower(__c) ((__c) | 32)

    __ctype_inline int toupper(int __c)
    {
    return islower(__c) ? _toupper(__c) : __c;
    }

    __ctype_inline int tolower(int __c)
    {
    return isupper(__c) ? _tolower(__c) : __c;
    }


        两种解决方案:

    1.transform(str.begin(), str.end(), str.begin(), (int (*)(int))toupper);

        这里(int (*)(int))toupper是将toupper转换为一个返回值为int,参数只有一个int的函数指针。

    2.自己实现ToUpper函数:
    int ToUpper(int c)
    {
        return toupper(c);
    }
    transform(str.begin(), str.end(), str.begin(), ToUpper);

    附:大小写转换函数
    #include <cctype>
    #include <string>
    #include <algorithm>

    using namespace std;

    void ToUpperString(string &str)
    {
        transform(str.begin(), str.end(), str.begin(), (int (*)(int))toupper);
    }

    void ToLowerString(string &str)
    {
        transform(str.begin(), str.end(), str.begin(), (int (*)(int))tolower);
    }

  • 相关阅读:
    django orm(2)
    django orm操作(1)
    Django 模型层(2)
    Django 模型层(1)
    6 Django的视图层
    Django的模板层
    可视化工具Navicat的使用
    adminlte html汉化
    nodejs安装package
    jquery验证框架validate的使用
  • 原文地址:https://www.cnblogs.com/lexus/p/2994835.html
Copyright © 2011-2022 走看看