C++,codewars.com/kata/5266876b8f4bf2da9b000362 Who likes it?, 6 kyu

/*
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";
  }
}
posted @ 2025-02-16 19:57  Kazuma_124  阅读(10)  评论(0)    收藏  举报