【codewars-14】选择性转换大写

Given a string, capitalize the letters that occupy even indexes and odd indexes separately, and return as shown below. Index 0 will be considered even.

For example, capitalize(“abcdef”) = [‘AbCdEf’, ‘aBcDeF’]. See test cases for more examples.

The input will be a lowercase string with no spaces.

要点

  • 主要思路是用std::transform进行大写转换, 因为需要使用字符的位置信息, 因此需要让lambda表达式对外部的index进行绑定.
  • std::transform的输出容器必须要保证其空间 >= 输入容器的空间, 否则输出容器中的结果将不完整. 在这里用resize()来保证有足够的空间, 否则没有输出结果
#include <string>
#include <utility>

std::pair<std::string, std::string> capitalize(const std::string &s)
{
  std::string first{};
  std::string second{};
  // !! 必要的resize() !!
  first.resize(s.size());  
  second.resize(s.size());
  
  int index{0};
  std::transform(s.begin(),s.end() , first.begin(), [&index](char ch){ return  index++%2==0? ::toupper(ch) : ch ;  } );
  
  index = 0;
  std::transform(s.begin(),s.end() ,second.begin(), [&index](char ch){ return   index++ %2!=0? ::toupper(ch) : ch ; } );

  return {first, second};
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值