zoukankan      html  css  js  c++  java
  • string类中字符的大小写转换

    今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写。
    之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换。

    比如下面的是大写转小写:

    string temp;
    string::iterator it;
    for (it = temp.begin(); it != temp.end(); it++)
            if ((*it) < 'a')
                *it = *it + 32;

    测试一下代码:

    #include<iostream>
    #include<string>
    using namespace std;
    int main(void)
    {
        string temp;
        string::iterator it;
        cin >> temp;
        for (it = temp.begin(); it != temp.end(); it++) //大写转小写
            if ((*it) < 'a')
                *it = *it + 32;
        cout  <<"转换成小写之后" <<temp << endl;
        for (it = temp.begin(); it != temp.end(); it++) //小写转大写
            if ((*it) > 'Z')
                *it = *it - 32;
        cout  <<"转换成大写之后" <<temp << endl;
        return 0;
    }

    测试输入
    AsdFghJkL

    测试输出
    转换成小写之后asdfghjkl
    转换成大写之后ASDFGHJKL

    测试图片:

    但是后面我发现其他大佬有更简单的做法,使用模板函数transform可以轻松解决这个问题,我们只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数。

    transform原型:

    template <class InputIterator, class OutputIterator, class UnaryOperator>
      OutputIterator transform (InputIterator first1, InputIterator last1,
                                OutputIterator result, UnaryOperator op)
    {
      while (first1 != last1) {
        *result = op(*first1);  // or: *result=binary_op(*first1,*first2++);
        ++result; ++first1;
      }
      return result;
    }

    以上的原型来自文档
    C++官方文档

    所以对于这个大小写转换只要这么写就行:

    transform(temp.begin(),temp.end(),temp.begin(),::tolower); //转小写
    transform(temp.begin(),temp.end(),temp.begin(),::toupper); //转大写

    更改代码

    #include<algorithm>
    #include<iostream>
    #include<string>
    using namespace std;
    int main(void)
    {
        string temp;
        cin >> temp;
        transform(temp.begin(),temp.end(),temp.begin(),::tolower); //转小写
        cout  <<"转换成小写之后" <<temp << endl;
        transform(temp.begin(),temp.end(),temp.begin(),::toupper); //转大写
        cout  <<"转换成大写之后" <<temp << endl;
        return 0;
    }

    结果一样:
    这里写图片描述

  • 相关阅读:
    GridView 几个受保护的方法的注释
    完全理解 IDisposable 接口的实现
    C++ 函数调用约定和名称修饰
    硬盘格式转换不影响数据_ convert命令FAT32转NTFS
    Win7系统修复_修复光盘的制作与使用
    双网卡共享上网设置
    Windows?XP系统修复方法
    无线路由器与有线路由器的连接(两个路由器连接)
    无线路由器“无线漫游”
    登录路由器没有弹出登录框_路由器无法登录解决办法
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/9052555.html
Copyright © 2011-2022 走看看