【问题标题】:String Concatenation with Integers字符串与整数的连接
【发布时间】:2011-08-16 04:17:52
【问题描述】:

DamageCost 是整数,但正如您在下面的代码中看到的,我想将它们与字符串连接起来(如果这是正确的词)。我怎样才能做到这一点?

class Weapon : Shopable{
    private:
        int Damage;
    public:
        std::string getDesc() const{
            return getName()+"\t"+Damage+"\t"+Cost;
        }
};

【问题讨论】:

    标签: c++ string integer concatenation


    【解决方案1】:

    为自己提供这个模板:

    #include <sstream>
    
    template <class TYPE> std::string Str( const TYPE & t ) {
        std::ostringstream os;
        os << t;
        return os.str();
    }
    

    然后你可以说:

    return getName() + "\t" + Str( Damage ) + "\t" + Str(Cost);
    

    请注意,这几乎等同于 Boost 的 lexical_cast,以及即将推出的标准中的类似设施。另请注意,此函数以性能换取便利和类型安全。

    【讨论】:

    • 这是唯一的方法吗?我认为有一些我在搜索中没有遇到的简单内置方法。在 Lua(我的主要语言)中,只有一个 tostring() 函数。
    【解决方案2】:

    您可以按如下方式使用boost::lexical_cast

    return getName()+"\t"+boost::lexical_cast<std::string>(Damage)+
      "\t"+boost::lexical_cast<std::string>(Cost);
    

    【讨论】:

      【解决方案3】:

      您已经接受了@unapersson 的回答,但为了记录,我会这样做...

      std::string getDesc() const
      {
          std::ostringstream ss;
          ss << getName() << "\t" << Damage << "\t" << Cost;
          return ss.str();
      }
      

      它只构造一个流对象,而不是为每次转换创建和丢弃它们,而且看起来也更好一些。

      (这是 C++ 方式 - 没有像其他语言那样通用的 'toString' 成员,通常我们使用字符串流或一次性函数,如@unapersson 的答案。)

      【讨论】:

        猜你喜欢
        • 2011-07-08
        • 1970-01-01
        • 2013-09-17
        • 2011-11-09
        • 2017-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多