/*
codewars.com/kata/5266876b8f4bf2da9b000362
Who likes it?, 6 kyu
设计函数, 传入vector<string>,返回string
规则示例演示
[] --> "no one likes this"
["Peter"] --> "Peter likes this"
["Jacob", "Alex"] --> "Jacob and Alex like this"
["Max", "John", "Mark"] --> "Max, John and Mark like this"
["Alex", "Jacob", "Mark", "Max"] --> "Alex, Jacob and 2 others like this"
*/
#include <string>
#include <vector>
std::string likes(const std::vector<std::string> &names)
{
using namespace std;
string ans = "";
if(names.empty()){
ans+="no one";
}else{
ans+=names[0];
}
if(names.size()>=3){
ans+=", "+names[1];
}
if(names.size()>=2){
ans+=" and";
}
if(names.size()==2||names.size()==3){
ans+=" "+names.back();
}else if(names.size()>=4){
ans+=" "+std::to_string(names.size()-2)+" others";
}
if(names.size()<=1){
ans+=" likes this";
}else{
ans+=" like this";
}
return ans; // Do your magic!
}
BestPractice
/*
Best Practices
确实,该用switch的时候就用,
这里应该对每种情况直接写出完整的结果,而不是让所有情况共用一套代码
分别写会更直观且便于修改
*/
#include <string>
#include <vector>
std::string likes(const std::vector<std::string> &names){
switch(names.size()){
case 0: return "no one likes this";
case 1: return names[0] + " likes this";
case 2: return names[0] + " and " + names[1] + " like this";
case 3: return names[0] + ", " + names[1] + " and " + names[2] + " like this";
default: return names[0] + ", " + names[1] + " and " + std::to_string(names.size() - 2) + " others like this";
}
}