前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >string类中字符的大小写转换

string类中字符的大小写转换

作者头像
Enterprise_
发布2019-02-21 17:19:35
1.6K0
发布2019-02-21 17:19:35
举报
文章被收录于专栏:小L的魔法馆小L的魔法馆

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

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

代码语言:javascript
复制
string temp;
string::iterator it;
for (it = temp.begin(); it != temp.end(); it++)
        if ((*it) < 'a')
            *it = *it + 32;

测试一下代码:

代码语言:javascript
复制
#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原型:

代码语言:javascript
复制
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++官方文档

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

代码语言:javascript
复制
transform(temp.begin(),temp.end(),temp.begin(),::tolower); //转小写
transform(temp.begin(),temp.end(),temp.begin(),::toupper); //转大写

更改代码

代码语言:javascript
复制
#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;
}

结果一样:

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年10月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档