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};
}