Como o comodoro Jaeger mencionou, não acho que nenhuma das outras respostas realmente responda a essa pergunta; a pergunta pergunta como repetir uma string, não um caractere.
Embora a resposta dada pelo Commodore esteja correta, é bastante ineficiente. Aqui está uma implementação mais rápida, a idéia é minimizar as operações de cópia e as alocações de memória aumentando primeiro exponencialmente a string:
#include <string>
#include <cstddef>
std::string repeat(std::string str, const std::size_t n)
{
if (n == 0) {
str.clear();
str.shrink_to_fit();
return str;
} else if (n == 1 || str.empty()) {
return str;
}
const auto period = str.size();
if (period == 1) {
str.append(n - 1, str.front());
return str;
}
str.reserve(period * n);
std::size_t m {2};
for (; m < n; m *= 2) str += str;
str.append(str.c_str(), (n - (m / 2)) * period);
return str;
}
Também podemos definir um operator*
para obter algo mais próximo da versão do Python:
#include <utility>
std::string operator*(std::string str, std::size_t n)
{
return repeat(std::move(str), n);
}
Na minha máquina, isso é cerca de 10x mais rápido que a implementação fornecida pelo Commodore e cerca de 2x mais rápido que uma solução ingênua 'acrescentar n - 1 vezes' .