C ++中类似Python的字符串乘法

时间:2017-09-23 11:18:13

标签: c++ c++11 stdstring

作为一名长期的Python程序员,我非常欣赏Python的字符串乘法功能,如下所示:

> print("=" * 5)  # =====

由于C ++ *没有std::string重载,我设计了以下代码:

#include <iostream>
#include <string>


std::string operator*(std::string& s, std::string::size_type n)
{
  std::string result;

  result.resize(s.size() * n);

  for (std::string::size_type idx = 0; idx != n; ++idx) {
    result += s;
  }
  return result;
}


int main()
{
  std::string x {"X"};

  std::cout << x * 5; // XXXXX
}

我的问题:这可以更加惯用/有效(或者我的代码甚至有缺陷)?

1 个答案:

答案 0 :(得分:1)

如果仅使用right constructor作为简单示例,那该怎么办:

std::cout << std::string('=',5) << std::endl;

对于真正的乘以 字符串,您应该使用简单的内联函数(以及 reserve() 来避免多次重新分配)< / p>

std::string operator*(const std::string& s, size_t n) {
    std::string result;
    result.reserve(s.size()*n);
    for(size_t i = 0; i < n; ++i) {
        result += s;
    }
    return result;
}

并使用它

std::cout << (std::string("=+") * 5) << std::endl;

查看Live Demo