C++:在没有显式循环的情况下重复输出i次

C++: Repeat output i times without an explicit loop

本文关键字:情况下 输出 循环 C++      更新时间:2023-10-16

有没有办法做到这一点而不需要循环写尽可能少的代码:

for (int i = 0; i < 10; i++) std::cout << 'x';

类似于python:

print 'x' * 10

使用std::string(size_t, char)构造函数:

std::cout << std::string(10, 'x');

请注意,与Python不同,这只适用于字符,而不适用于字符串。

void print(const char *s, int n)
{
   if (n > 0) 
   {
      cout << s;
      print(s, n - 1);
   }
}

应该做到这一点。

std::generate_n(
    std::ostream_iterator<char>(std::cout, ""),
    10,
    [](){ return 'x'; }
);

最可扩展/可重用的方法是创建一个类似于Ed的函数,尽管我会使用字符串流,而不会将该函数与打印耦合

IMO,NPE的答案限制性太强,因为它只能是一个字符,而Ed的答案更像是一个C答案,而不是C++答案。作为一个附带的好处,该函数还允许您流式传输字符、整数、字符串等。

template <class T>
std::string multiplyString(int count, const T &input)
{
    std::stringstream ss;
    for(int i = 0; i < count; i++)
       ss << T;
    return ss.str();
}
int main(argc, char *argv[])
{
    std::cout << multiplyString(10, 'x') << std::endl;
    std::cout << multiplyString(5, "xx") << std::endl;
    std::cout << multiplyString(5, 1234) << std::endl;
}

祝好运

由于没有其他人提供合理的实现:

std::string
multiplyStrings( int count, std::string const& original )
{
    std::string results;
    results.reserve( count * original.size() );  //  Just optimization
    while ( count > 0 ) {
        results += original;
    }
    return results;
}

由此创建operator*的重载不会困难的在命名空间std中定义它们将是未定义的行为,但IMHO,你很有可能无论如何都可以逃脱惩罚。