codewars的一道题,要返回一个字符串序列的中间字符,偶数个的话返回中间两个字符,奇数的话返回中间一个字符串,例如:
Kata.getMiddle("test") should return "es"
Kata.getMiddle("testing") should return "t"
自己是这么写的:
std::string get_middle(std::string input)
{
/* return input.size()%2 ?
input[input.size()/2+1] :
(input[input.size()/2-1]+input[input.size()/2]);*/
/*对字符串操作还是使用substr()好,使用下标运算符的话不好进行操作,
因为变成了char,所以上面写的是不对的,下面的才对*/
return input.size()%2 ?
input.substr(input.size()/2,1) :
input.substr(input.size()/2-1,2);
}
自己写的使用了三元表达式,判断length是odd还是even。但下面这个,就很妙,不需要判断,判断暗含在计算式之中,可以记一下,小技巧,虽然不太易读,但省事儿啊
std::string get_middle(std::string input)
{
return input.substr
(
(input.size()-1)/2,
(input.size()+1)%2+1
);//太长,括号看着麻烦,就分行了,易读
}